C. Graph and String

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Graph and String相关的知识,希望对你有一定的参考价值。

二分图染色

b点跟除自身外所有的点连接,共n-1个,首先把连接n-1个的点全部设为b点,其它点任意一点设为a,与a相连的都是a点,剩余为c点。最后验证是否成立。

验证条件为,所有连接的点之间的差值的绝对值不超过1,未连接的点之间的差值的绝对值都大于1.

 1 #include<bits/stdc++.h>
 2 #include<stdlib.h>
 3 #include<math.h>
 4 using namespace std;
 5 int mp[520][520];
 6 int cnt[520];
 7 int flag[520];
 8 int n,m;
 9 int main()
10 {
11     scanf("%d%d",&n,&m);
12 
13     for(int i=1;i<=m;i++)
14     {
15         int x,y;
16         scanf("%d%d",&x,&y);
17         mp[x][y]=mp[y][x]=1;
18         cnt[x]++;
19         cnt[y]++;
20     }
21     for(int i=1;i<=n;i++)
22     {
23         if(cnt[i]==n-1)
24             flag[i]=2;
25 
26     }
27     int now=0;
28     for(int i=1;i<=n;i++)
29     {
30         if(flag[i]!=2)
31         {
32             now=i;
33             break;
34         }
35     }
36         if(now==0)
37         {
38             printf("Yes\n");
39             for(int i=1;i<=n;i++)
40                 printf("b");
41             return 0;
42         }
43 
44         flag[now]=1;
45         for(int i=1;i<=n;i++)
46         {
47             if(now==i) continue;
48            // if(mp[i][now])
49             if(!mp[i][now]) flag[i]=3;
50             else if(flag[i]==0) flag[i]=1;
51         }
52         for(int i=1;i<=n;i++)
53         {
54             for(int j=1;j<=n;j++)
55             {
56                 if(i==j) continue;
57                 if(mp[i][j])
58                 {
59                     if(abs(flag[i]-flag[j])>1)
60                         return puts("No");
61                 }
62                 else
63                 {
64                     if(abs(flag[i]-flag[j])<=1)
65                         return puts("No");
66                 }
67             }
68         }
69         printf("Yes\n");
70         for(int i=1;i<=n;i++)
71         {
72             if(flag[i]==1) cout<<a;
73             else if(flag[i]==2) cout<<b;
74             else cout<<c;
75         }
76         return 0;
77 
78 }

 

以上是关于C. Graph and String的主要内容,如果未能解决你的问题,请参考以下文章

双端队列 C. Vasya and String

[Codeforces 623A] Graph and String

CF623A Graph and String

cf623A. Graph and String(二分图 构造)

codeforces 623A. Graph and String 构造

Codeforces Round #354 (Div. 2) C. Vasya and String