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. ");return; 44 } 45 } 46 } 47 printf("BICOLORABLE. ");//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 }