【2016ACM/ICPC亚洲区大连站A】HDU - 5971 Wrestling Match 二分图染色
题意
有n个人,m场摔跤比赛,其中已确定x个好的选手,y个差的选手。
问能否将每个人划分成好的选手或差的选手。
http://acm.hdu.edu.cn/showproblem.php?pid=5971
分析
二分图染色模板题
dfs染色先从已经确定的人开始染色与其相关的人,矛盾就 NO
然后对于不确定的人,枚举染色,如果矛盾就是 NO
如果最后还存在不确定的,那么就是 NO
否则就是 YES
代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAX_N=1005; 4 int n,color[MAX_N]; 5 vector<int> G[MAX_N]; 6 bool dfs(int v,int c) 7 { 8 color[v]=c; 9 for(unsigned i=0;i<G[v].size();++i) 10 { 11 if(color[G[v][i]]==c) 12 return false; 13 if(color[G[v][i]]==0&&!dfs(G[v][i],-c)) 14 return false; 15 } 16 return true; 17 } 18 void solve() 19 { 20 for(int i=1;i<=n;++i) 21 if(color[i]==-1) 22 { 23 cout<<"NO\n"; 24 return; 25 } 26 for(int i=1;i<=n;++i) 27 { 28 if(color[i]==2&& !dfs(i,2)) 29 { 30 cout<<"NO\n"; 31 return; 32 } 33 if(color[i]==-2&& !dfs(i,-2)) 34 { 35 cout<<"NO\n"; 36 return; 37 } 38 } 39 for(int i=1;i<=n;++i) 40 if(color[i]==0) 41 { 42 if(!dfs(i,2)) 43 { 44 cout<<"NO\n"; 45 return; 46 } 47 } 48 cout<<"YES\n"; 49 } 50 int main() 51 { 52 ios::sync_with_stdio(false); 53 int m,x,y; 54 while(cin>>n>>m>>x>>y) 55 { 56 int a,b; 57 58 for(int i=1;i<=n;++i)//清空数据 59 G[i].clear(); 60 memset(color,-1,sizeof(color)); 61 62 for(int i=1;i<=m;++i) 63 { 64 cin>>a>>b; 65 color[a]=0; 66 color[b]=0; 67 G[a].push_back(b); 68 G[b].push_back(a); 69 } 70 for(int i=1;i<=x;++i) 71 { 72 cin>>a; 73 color[a]=2; 74 } 75 for(int i=1;i<=y;++i) 76 { 77 cin>>b; 78 color[b]=-2; 79 } 80 solve(); 81 } 82 return 0; 83 }
转载于:https://www.cnblogs.com/helloWR/p/10909094.html
【2016ACM/ICPC亚洲区大连站A】HDU - 5971 Wrestling Match 二分图染色相关推荐
- 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...
- 2016ACM/ICPC亚洲区大连站现场赛题解报告
此文章可以使用目录功能哟↑(点击上方[+]) 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做 ...
- 2016ACM/ICPC亚洲区大连站-补题
2016ACM/ICPC亚洲区大连站-补题 5971-Wrestling Match 题目隐藏条件:除去已经知道的好人和坏人,如果剩余的人恰好被分成两组,即便不知道这两组哪组是好人,也是输出YES 做 ...
- 【2016ACM/ICPC亚洲区大连站C】HDU - 5973 Game of Taking Stones 威佐夫博弈
题意 给你两个石堆的石头数量,两个人轮流拿,两人轮流从任意一堆取至少一个或者从两堆取同样多的物品.问你先手获胜还是后手胜. http://acm.hdu.edu.cn/showproblem.php? ...
- 2016ACM/ICPC亚洲区大连站题解
以下所有AC题解程序来自"仙客传奇"团队. AC题数:10/11 ABCDFHIJK A. Wrestling Match AC的C++语言程序: #include <ios ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
目录 A Thickest Burger B Relative atomic mass C Recursive sequence · 矩阵快速幂 E Counting Cliques · 暴力 H G ...
- HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)
题目分析 这道题看样子没有什么办法,主要就是有策略的暴力,因为每个点连接的点不超过20个,那么就可以直接进行暴力,但是这样会有很多重复,因此需要剪枝,具体情况就是每次搜过一个点之后就把这个点连接的所有 ...
- HDU Problem - 5971 Wrestling Match(染色)
题目链接 Problem Description Nowadays, at least one wrestling match is held every year in our country. T ...
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)
HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge Solution 我们考虑维护在环上的边的个数,答案就是总边数减去环上边数. 环的形态是这样的:(0,l),(0,l+1)...(0 ...
最新文章
- Linux 文件系统常用命令:cat命令
- 十二、八皇后问题(递归回溯)
- {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
- 容斥原理应用(求1~r中有多少个数与n互素)
- c++基础day03
- ubuntu11.10 samba服务器配置
- matlab 正则化表达式_MATLAB 正则表达式(一)(转)
- mysql添加一个字段(
- html语言考点,HTML知识点
- weblogic安装及部署
- 安装Windows刷机adb环境手册
- 弹性系数和线径的计算公式_弹簧计算公式
- HEER-Easing Embedding Learning by Comprehensive Transcription of Heterogeneous Information Networks
- Greenplum 6 磁盘配额管理工具“Diskquota”
- a non-fatal error occured whilst loading database modules
- 一张照片就能攻破人脸识别系统,人脸识别安全性亟需提高
- 用Python写随机密码生成
- sql server数据库卡问题排查
- html css齿轮滚动特效,纯CSS3实现的齿轮滚动动画
- THREEJS - 旋转中心调整
热门文章
- python图像处理库PIL高清晰保存缩放图片
- 利用HtmlAgilityPack插件写的一个抓取指定网页的图片 第一次写 很乱 随便看看就行...
- ​蔚来「能源云」和「领航换电」是有序充电甚至 V2G 的完美场景
- 《代码整洁之道》:这代码写的太烂了!这些重构的小技巧帮你告别你的“垃圾代码”!...
- Android 加载高清巨图,无需剪裁压缩
- 盘点互联网高薪职业岗位,看看字节跳动程序员怎么说
- win7系统怎样添加wifi连接到服务器,win7系统怎么设置无线网络连接
- 相亲旅游必备——决策树简单代码(numpy和sklearn)实现示例
- 积分清零规则的三种状态
- 不要停下来!八分音符酱!青年男女深夜频频鬼叫!!!