B - Bicoloring (二分图判定)
Posted liuyongliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B - Bicoloring (二分图判定)相关的知识,希望对你有一定的参考价值。
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 */
以上是关于B - Bicoloring (二分图判定)的主要内容,如果未能解决你的问题,请参考以下文章
UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)
二分图匹配入门专题1I - Hiding Gold light oj 1152二分图匹配-------------------我是终于不那么水的水题分割线------------------(代码片