1. 程式人生 > >B - Bicoloring (二分圖判定)

B - Bicoloring (二分圖判定)

bic eve ima end == itl isp 二分 truct

技術分享圖片

B - Bicoloring

題意:判斷此圖是否為二分圖(染色法,相鄰兩點不同色)

AC代碼:

技術分享圖片
 1 /***********************************************/
 2 
 3 int co[250];
 4 
 5 struct node{
 6     int v;
 7     node(){}
 8     node(int _v):v(_v){}
 9 };
10 vector<node>G[250];//鄰接表法 
11 
12 int fff=0;
13 
14 void dfs(int now,int
pre) 15 { 16 if(~co[now]) 17 { 18 if(co[pre]!=0) co[now]=-co[pre]; 19 else co[now]=1;//頭結點染色 20 //cout<<"co"<<G[now].size()<<endl; 21 for(int i=0;i<G[now].size();i++) 22 { 23 if(fff==0 && G[now][i].v!=pre) 24
dfs(G[now][i].v,now); 25 } 26 } 27 28 else{//染過 29 if(co[now]==co[pre]){ 30 fff=1; 31 } 32 } 33 34 } 35 36 int main() 37 { 38 int n,m; 39 while(cin>>n && n) 40 { 41 fff=0; 42 mem0(G);
43 cin>>m; 44 for(int i=1;i<=m;i++){ 45 int a,b; 46 cin>>a>>b; 47 G[a].push_back(node(b)); 48 G[b].push_back(node(a)); 49 } 50 mem0(co); 51 dfs(0,0); 52 //for(int i=0;i<n;i++) cout<<co[i]<<"tt"; 53 if(fff){ 54 cout<<"NOT BICOLORABLE."<<endl; 55 } 56 else cout<<"BICOLORABLE."<<endl; 57 } 58 return 0; 59 } 60 61 /* 62 3 63 3 64 0 1 65 1 2 66 2 0 67 3 68 2 69 0 1 70 1 2 71 9 72 8 73 0 1 74 0 2 75 0 3 76 0 4 77 0 5 78 0 6 79 0 7 80 0 8 81 0 82 83 */
View Code

B - Bicoloring (二分圖判定)