Bicoloring 二分图+染色

https://vjudge.net/contest/281085?tdsourcetag=s_pcqq_aiomsg#problem/B

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<stdlib.h>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<string>
10 #include<set>
11 #include<cctype>
12 #include<sstream>
13 #define mem(a) memset(a,0,sizeof(a))
14 #define LL long long
15 #define inf 0x3f3f3f3f
16 using namespace std;
17 const int N=1e3+5;
18 int color[N],link[N][N];
19 int n,m;
20 bool dfs(int v,int c)
21 {
22   color[v]=c;
23   for(int i=0;i<n;i++)
24   {
25       if(link[v][i]) //查找所有邻近的
26       {
27           if(color[i]==c) 
28           return false;
29           if(color[i]==0&&!dfs(i,-c))
30           return false;
31       }
32   }
33   return true;
34 }
35 void solve()
36 {
37    for(int i=0;i<n;i++)
38    {
39       if(color[i]==0)
40       {
41           if(!dfs(i,1))
42          {
43              printf("NOT BICOLORABLE.\n");return;
44          }
45       }
46    }
47    printf("BICOLORABLE.\n");//return;
48 }
49 int main()
50 {
51     int a,b;
52   while(~scanf("%d",&n)&&n)
53   {
54      mem(color);
55      mem(link);
56      scanf("%d",&m);
57      for(int i=0;i<m;i++)
58      {
59          scanf("%d %d",&a,&b);
60          link[a][b]=1; //注意双向
61          link[b][a]=1;
62      }
63     solve();
64   }
65   return 0;
66 }
View Code

猜你喜欢

转载自www.cnblogs.com/XXrll/p/10322887.html