hdu 4751
来源:互联网 发布:王使屈平为令众莫不知 编辑:程序博客网 时间:2024/05/16 11:26
一个人就是弱···做这个题做了四个小时···一直WA开始以为两个动态数组当作两个组,依次把每个人加入就好,还真觉得没什么问题。。。思维好搓啊,哪里可以这么简单。后面下来才知道这是一个tow_sat问题,第一次听说这个名词···,大概和二分图差不多,既然要分组,那么不认识的肯定不能在同一组,用两个标记进行排斥分组就好,但得注意此处的单方认识也要当作不认识,后面枚举每个点进行一遍dfs()查找是否有矛盾就好,这是很基础的一个模型,要好好体会这种思想。
#include<cstdio>#include<cstring>int G[105][105];int color[105];int n;int dfs(int x){ for(int i=1;i<=n;i++){ if(G[x][i]||x==i)continue; if(color[i]!=0&&color[i]==color[x])return 0;//如果出现矛盾就返回0代表不可能 else{ color[i]=0-color[x];//由于不认识就得染上不同颜色 if(!dfs(i))return 0;//继续dfs } } return 1;}int main(){ while(scanf("%d",&n)!=EOF){ int u; memset(G,0,sizeof(G)); memset(color,0,sizeof(color)); for(int i=1;i<=n;i++) while(scanf("%d",&u)&&u)G[i][u]=1; //单方认识在这里也算互不认识 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)if(G[i][j]&&!G[j][i]) { G[i][j]=G[j][i]=0; } int i; for(i=1;i<=n;i++){ if(color[i]!=0)continue; color[i]=1;//既然是最初的分组或者是朋友就可以分在这个组里面 if(!dfs(i))break; } if(i>n)printf("YES\n"); else printf("NO\n"); } return 0;}
- hdu 4751
- HDU 4751 Divide Groups
- HDU-4751-Divide Groups
- hdu 4751(twosat)
- HDU 4751 Divide Groups
- HDU:4751 Divide Groups
- hdu 4751(dfs染色)
- HDU 4751 BFS
- HDU-4751 Divide Groups
- HDU 4751 Divide Groups
- hdu 4751 Divide Groups
- HDU 4751 Divide Groups
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- 不靠谱的Unity3D
- 常见 Webshell 的检测方法及检测绕过思路
- [介绍] SymbolSort, 帮你避免或减少代码膨胀 (Code Bloat)
- Linux下实现U盘、SD卡自动挂载功能
- Win32编程点滴1
- hdu 4751
- maven pom.xml详解
- iOS 7不再支持获取MAC地址
- POJ 1026 Cipher
- Hudson使用说明
- Linux开机启动十步骤
- C++:STL标准入门汇总
- Win32编程点滴2
- QT控制选中item的文字颜色(HighlightedText) 和 QT表格交替背景色