hdu 4751 判二分图,整个图不一定连通
2015-07-01 18:09
232 查看
题意:人与人之间可以认识或不认识,可以单向认识也可以双向认识,给你他们认识的关系,让你将他们分成两组,每组里面的任意两个人都认识。
转化一下,将双向认识的人之间不连边,单向认识或不认识的人连边,然后判二分图就行了。
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; const int maxn=105; int maze[maxn][maxn]; int imap[maxn][maxn]; int color[maxn]; int n; bool fuck_dfs(int u,int f) { for(int i=1; i<=n; i++) { if(imap[u][i]==0||i==f) continue; if(color[u]==color[i]) return false; if(!color[i]) { color[i]=3-color[u]; if(!fuck_dfs(i,u)) return false; } } return true; } int main() { int a; while(~scanf("%d",&n)) { memset(maze,0,sizeof(maze)); for(int i=1; i<=n; i++) { while(scanf("%d",&a)) { if(a==0) break; maze[i][a]=1; } } memset(imap,0,sizeof(imap)); for(int i=1; i<=n; i++) { for(int j=i+1; j<=n; j++) { if(maze[i][j]&&maze[j][i]) continue; imap[i][j]=imap[j][i]=1; } } int flag=0; memset(color,0,sizeof(color)); for(int i=1; i<=n; i++) { if(color[i]==0) { color[i]=1; if(!fuck_dfs(i,i)) { flag=1; break; } } } if(flag) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- 优化MySQL的21个建议
- oracle sql 写9乘9
- 【Unity3D】学习第一天
- 电容选型
- ceph集群硬件相关
- linux 正则匹配小记
- AS3 复制Object
- mysql 中文乱码问题
- Entity Framework 6.1
- [程序猿面试题精选100称号]1.转变为一个二叉搜索树有序双向链表
- Linux IO函数的使用和区别
- Storm0.9.5的集群部署配置优化
- MTK6592的modem-1.ubuntu14.04下的编译烧写及调试
- JS对字符串的操作
- DNS 服务相关概念 (二)
- 如何用Maven创建web项目(具体步骤)
- 三星Note II (Android 4.1.1)上安装Ubantu 12.04到ext4分区 (2013-05-10 08:54:52)
- atitit.提升研发效率的利器---重型框架与类库的区别与设计原则
- 代码调试本质及事件冒泡
- Complete The Pattern #6 - Odd Ladder