二分图的判断
来源:互联网 发布:手机网络代理ip 编辑:程序博客网 时间:2024/05/21 08:53
hdu-5971 二分图的判断
题意:给出若干组参赛者的信息,每组中都有一个goog player和bad player,再给出确定为good player和bad player的序号,问这些参赛者是否可以分成good player和bad player两大类。
先从good player 和 bad player 开始深搜,搜完后从剩余人中深搜,在搜索过程中,如果遇到矛盾的情况直接输出NO,否则的话输出YES
#include <iostream>#include <vector>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAX_V = 1010;int V,E;int col[1010];///用来记录每位参赛者的信息(0:好坏信息未知,1:good player ,-1:bad player)vector<int> G[MAX_V];///邻接表来存参赛者之间的关系int n,m,x,y;int vis[1010];//记录每位参赛者在样例中的是否出现(0:未出现,1:出现)bool dfs(int s,int c){ col[s]=c; for(int i=0;i<G[s].size();i++) { if(col[G[s][i]]==col[s]) return false; if(col[G[s][i]]==0&&!dfs(G[s][i],-c))//再次搜索时,要改变c的值,因为一对参赛者的好坏属性是不一样的 return false; } return true; }int main(){ while(~scanf("%d%d%d%d",&n,&m,&x,&y)) { memset(col,0,sizeof(col)); memset(vis,0,sizeof(vis)); int a,b,sum=0;///sum是用来记录样例中出现的参加比赛的人数 for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); G[a].push_back(b); G[b].push_back(a); if(!vis[a]) { vis[a]=1; sum++; } if(!vis[b]) { vis[b]=1; sum++; } } int dis; for(int i=1;i<=x;i++) { scanf("%d",&dis); col[dis]=1; if(!vis[dis]) { vis[dis]=1; sum++; } } for(int i=1;i<=y;i++) { scanf("%d",&dis); col[dis]=-1; if(!vis[dis]) { vis[dis]=1; sum++; } } if(sum!=n) /////sum!=n,导致某些参赛者的信息无法判断(究竟是好人还是坏人无法判断),直接输出NO { printf("NO\n"); continue; } int flog=0; ///////先从good player 开始深搜/////// for(int i=1;i<=n;i++) { if(col[i]==1) { if(!dfs(i,1)) { flog=1; break; } } } ////从bad player 开始深搜//// for(int i=1;i<=n;i++) { if(col[i]==-1) { if(!dfs(i,-1)) { flog=1; break; } } } ////从还未确定信息的参赛者深搜/// for(int i=1;i<=n;i++) { if(col[i]==0) { if(!dfs(i,1)) { flog=1; break; } } }// for(int i=1;i<=n;i++)// cout<<col[i]<<endl; if(flog) printf("NO\n"); else printf("YES\n"); for(int i=1;i<=n;i++) G[i].clear(); } return 0;}
阅读全文
0 0
- 二分图的判断
- 二分图的判断
- hdu4751 二分图的判断
- 二分图的判断--染色
- 二分图的判断和二分图最大匹配模板
- 二分图判断 (图的搜索)
- hdu3478(图的联通+二分图判断)
- soj4522 完全二分图的判断
- 二分图判断
- 判断二分图
- 二分图判断
- 判断二分图 bfs
- 二分图判断
- 二分图判断
- HDU4751 二分图判断
- 二分图判断
- HDU 4751 Divide Groups(二分图的判断)
- 二分图判定和割顶与桥的判断
- goclipse的autoimport(备忘)
- 1005. 继续(3n+1)猜想(Python)
- Unity Shader渲染顺序 坐标系 和光照模型
- android之VideoView和视频播放View的扩展
- (转)区块链:哈希、公钥、私钥、加密、数字签名、数字证书、默克尔树、零知识证明
- 二分图的判断
- Hadoop2.6.0中YARN底层状态机实现分析
- openSMILE语音特征提取
- 常见错误整理 嵌入式linux使用
- shell输入输出重定向(不存在文件会自动创建)
- VMware station 14开启虚拟机黑屏解决方案
- getchar()在C程序中的妙用!
- ElasticSearch入门
- 普及区块链技术