码迷,mamicode.com
首页 > 其他好文 > 详细

染色法判断二分图

时间:2017-04-20 19:42:24      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:splay   ==   open   code   不同   代码   二分图   cst   相同   

染色法判断二分图

给一个无向图,判断是否是二分图。

这很简单:

1.把节点1染为1。

2.搜索各点,遍历与此点u相连的点v。

3.如果点v没颜色,把它染为与点u相反的颜色(即-u)。

4.如果有颜色,则比较v与u颜色是否相同。若相同,返回0;若不同,则继续。

代码:

技术分享
 1 #include<cstdio>
 2 #define N 420000
 3 int head[N],next[N],to[N],rs[N],n,m,a,b,y,num;
 4 int dfs(int x){
 5     for(int i=head[x];i;i=next[i]){
 6         y=to[i];
 7         if(rs[y]==rs[x])
 8             return 0;
 9         if(!rs[y])
10             rs[y]=-rs[x];
11     }
12     return 1;
13 }
14 int main(){
15     scanf("%d%d",&n,&m);
16     if(n==1){
17         printf("NO");
18         return 0;
19     }
20     for(int i=1;i<=m;++i){
21         scanf("%d%d",&a,&b);
22         next[++num]=head[a];
23         to[num]=b;
24         head[a]=num;
25     }
26     rs[1]=1;
27     for(int i=1;i<=n;++i){
28         if(!dfs(i)){
29             printf("NO");
30             return 0;
31         }
32     }
33     printf("YES");
34     return 0;
35 }
View Code

不过代码不一定对,反正自己测得几组数是都对了。

染色法判断二分图

标签:splay   ==   open   code   不同   代码   二分图   cst   相同   

原文地址:http://www.cnblogs.com/jsawz/p/6740246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!