• 【Henu ACM Round#16 C】Graph and String


    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    根据题意:先明确以下规则: 1.如果两个点之间没有边,那么这两个点只能是a或c,且不能相同 2.如果两个点之间有边,那么他们之间的差的绝对值<=1

    那么对于点i,如果它和所有的点都相连了,那么就干脆把他变成b.
    这样其他点无论选什么都和它没有关系,其他点选什么都可以了

    接下里,找到任意一个点j,且点j没有和所有的点相连。
    显然这个点只能为a或c,因为它和某个点之间没有边。【规则1】

    那么我们就让这个点j设置为a;

    ①然后对于和j相连的所有点k,且点k不为b(即k不与其他所有点相连),那么点k
    只能为a或c(因为k和某个点之间没有边)【规则1】
    而根据【规则2】可知点k只能为a

    ②对于和j不相连的所有点k,显然k只能为c

    根据①和②
    会发现所有的点都已经染上色了
    而点j为a或c其实不影响答案。

    所以再O(n^2)根据规则判断一下这个染色是否可行就好了。

    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 500+10;
    
    int c[N],n,m,chu[N+10];
    bool b[N][N];
    
    int main()
    {
        ios::sync_with_stdio(0),cin.tie(0);
        #ifdef LOCAL_DEFINE
            freopen("rush.txt","r",stdin);
        #endif
    
        cin >> n >> m;
        for (int i = 1;i <= m;i++){
            int x,y;
            cin >> x >> y;
            b[x][y] = b[y][x] = true;
            chu[x]++;chu[y]++;
        }
    
        for (int i = 1;i <= n;i++)
            if (chu[i]==(n-1))
                c[i] = 2;
    
        for (int i = 1;i <= n;i++)
            if (c[i]!=2){
                c[i] = 1;
                for (int j = 1;j <= n;j++)
                    if (b[i][j] && c[j]!=2){
                        c[j] = 1;
                    }else if (i!=j && !b[i][j]){
                        c[j] = 3;
                    }
                break;
            }
    
        for (int i = 1;i <= n;i++)
            for (int j = 1;j <= n;j++)
                if (b[i][j]){
                    if (abs(c[i]-c[j])>1) return cout<<"No"<<endl,0;
                }else if (i!=j){
                    if (abs(c[i]-c[j])<=1) return cout<<"No"<<endl,0;
                }
        cout<<"Yes"<<endl;
        for (int i = 1;i <= n;i++){
            if (c[i]==1) cout<<'a';
            if (c[i]==2) cout<<'b';
            if (c[i]==3) cout<<'c';
        }
        return 0;
    }
    
  • 相关阅读:
    第1周作业
    第0次作业
    第三周作业
    随笔1
    第一次作业
    第二周作业
    第零次作业
    第四周作业
    第三周作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8358933.html
Copyright © 2020-2023  润新知