HDU 5971"Wrestling Match"(二分图染色)
•题意
给出 n 个人,m 场比赛;
这 m 场比赛,每一场比赛中的对决的两人,一个属于 "good player" 另一个属于 "bad player";
给出你 x 个已经确定的"good player" 和 y 个已经确定的 "bad player"。
问是否可以将这 n 个人划分成两类,其中一类属于 "good player",另一类属于 "bad player";
即不存在某人即属于 "good player" 又属于 "bad player";
如果能,输出 "YES",反之,输出 "NO";
•题解
对于每一场比赛的两人 $u,v$,连一条双向边 $u\rightarrow v\ ,\ v\rightarrow u$;
然后 DFS 染色。
先从已经确定的 $x+y$ 个人开始,染色与其相关的人,矛盾就输出 "NO";
然后对于不确定的人,枚举染色, 矛盾就输出 "NO";
如果不存在矛盾,输出 "YES";
•Code
- #include<bits/stdc++.h>
- using namespace std;
- const int N=1e3+;
- const int M=1e4+;
- int n,m,x,y;
- int num;
- int head[N];
- struct Edge
- {
- int to;
- int next;
- }G[M<<];
- void addEdge(int u,int v)
- {
- G[num]={v,head[u]};
- head[u]=num++;
- }
- int col[N];///0:Good , 1:bad
- int g[N];
- int b[N];
- bool ok;
- void DFS(int u,int flag)
- {
- col[u]=flag;
- for(int i=head[u];~i && !ok;i=G[i].next)
- {
- int v=G[i].to;
- if(col[v] == -)
- DFS(v,flag^);
- if(col[v] == col[u])///u,v对立,如果出现col[u]=col[v],矛盾
- ok=true;
- }
- }
- char *Solve()
- {
- for(int i=;i <= x;++i)
- {
- int u=g[i];
- ok=false;
- if(col[u] == -)
- DFS(u,);
- if(ok || col[u] == )
- return "NO";
- }
- for(int i=;i <= y;++i)
- {
- int u=b[i];
- if(col[u] == -)
- DFS(u,);
- if(ok || col[u] == )
- return "NO";
- }
- for(int i=;i <= n;++i)
- {
- ok=false;
- if(col[i] == - && head[i] != -)
- DFS(i,);
- if(ok)
- return "NO";
- }
- return "YES";
- }
- void Init()
- {
- num=;
- for(int i=;i <= n;++i)
- {
- col[i]=-;
- head[i]=-;
- }
- }
- int main()
- {
- // freopen("C:\\Users\\hyacinthLJP\\Desktop\\C++WorkSpace\\in&&out\\contest","r",stdin);
- while(~scanf("%d%d%d%d",&n,&m,&x,&y))
- {
- Init();
- for(int i=;i <= m;++i)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- addEdge(u,v);
- addEdge(v,u);
- }
- for(int i=;i <= x;++i)
- scanf("%d",g+i);
- for(int i=;i <= y;++i)
- scanf("%d",b+i);
- puts(Solve());
- }
- return ;
- }
HDU 5971"Wrestling Match"(二分图染色)的更多相关文章
- hdu 5971 Wrestling Match 二分图染色
题目链接 题意 \(n\)人进行\(m\)场比赛,给定\(m\)场比赛的双方编号:再给定已知的为\(good\ player\)的\(x\)个人的编号,已知的为\(bad\ player\)的\(y\ ...
- HDU 5971 Wrestling Match (二分图)
题意:给定n个人的两两比赛,每个人要么是good 要么是bad,现在问你能不能唯一确定并且是合理的. 析:其实就是一个二分图染色,如果产生矛盾了就是不能,否则就是可以的. 代码如下: #pragma ...
- hdu 5971 Wrestling Match
题目链接: hdu 5971 Wrestling Match 题意:N个选手,M场比赛,已知x个好人,y个坏人,问能否将选手划分成好人和坏人两个阵营,保证每场比赛必有一个好人和一个坏人参加. 题解:d ...
- hdu 5971 Wrestling Match 判断能否构成二分图
http://acm.hdu.edu.cn/showproblem.php?pid=5971 Wrestling Match Time Limit: 2000/1000 MS (Java/Others ...
- A - Wrestling Match HDU - 5971
Nowadays, at least one wrestling match is held every year in our country. There are a lot of people ...
- HDU 3081 Marriage Match II (二分图,并查集)
HDU 3081 Marriage Match II (二分图,并查集) Description Presumably, you all have known the question of stab ...
- HDU 5971 二分图判定
Wrestling Match Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU2444 :The Accomodation of Students(二分图染色+二分图匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)
HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...
随机推荐
- VLSM(可变长子网掩码)
http://blog.sina.com.cn/s/blog_635e1a9e0100yk51.html(转载) VLSM的介绍: VLSM(VLSM(Variable Length Subnetwo ...
- Leetcode705.Design HashSet设置哈希集合
不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中是否存在这个值. rem ...
- SpringBoot 异步 定时任务 邮件
springboot异步 一: 在 MyConfiguration.java 中开启注解 @Configuration//指明当前类是一个配置类:就是来替代之前的Spring配置文件@EnableAs ...
- sping,springMVC @Component 注解的对象都是单例模式,变量不能全局
错误方式: 将属性和变量定义为全局,单例模式,所有人共享,导致所有人的数据都发生错误! 正确方式 一: 将变量定义到局部,互不影响. 正确方式 二: 假如必须放到全局所有方法 ...
- Python之整数类型
整数:18,73,84 每一个整数都有如下的功能:class int(object): """ int(x=0) -> int or long int(x, bas ...
- php 常用类汇总
转自:http://www.blhere.com/953.html 图表库 下面的类库可以让你很简单就能创建复杂的图表和图片.当然,它们需要GD库的支持. pChart - 一个可以创建统计图的库. ...
- HTML之HTML标签
前端的三把利器: (1)HTML就像一个赤裸裸的人 (2)css就好比一件衣服 ...
- 【调试】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息(转载)
在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量.有时在查看窗口显示的内容不是很直观.为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧.下面 ...
- JAVA高级特性--String/StringBuffer/Builder
String String对象一旦创建就不能改变 是常量 需要进行大量字符串操作应采用StringBuffer/StringBuilder 最终结果转换成String对象 StringBuffer ...
- springboot项目启动,但是访问报404错误
启动类Application上加了@ComponentScan(basePackages = {})这个注解导致controller扫描不到导致的,如果加了这个注解,springboot就不会扫描Ap ...