传送门

•题意

  给出 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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e3+;
  4. const int M=1e4+;
  5.  
  6. int n,m,x,y;
  7. int num;
  8. int head[N];
  9. struct Edge
  10. {
  11. int to;
  12. int next;
  13. }G[M<<];
  14. void addEdge(int u,int v)
  15. {
  16. G[num]={v,head[u]};
  17. head[u]=num++;
  18. }
  19. int col[N];///0:Good , 1:bad
  20. int g[N];
  21. int b[N];
  22. bool ok;
  23.  
  24. void DFS(int u,int flag)
  25. {
  26. col[u]=flag;
  27. for(int i=head[u];~i && !ok;i=G[i].next)
  28. {
  29. int v=G[i].to;
  30.  
  31. if(col[v] == -)
  32. DFS(v,flag^);
  33.  
  34. if(col[v] == col[u])///u,v对立,如果出现col[u]=col[v],矛盾
  35. ok=true;
  36. }
  37. }
  38. char *Solve()
  39. {
  40. for(int i=;i <= x;++i)
  41. {
  42. int u=g[i];
  43. ok=false;
  44. if(col[u] == -)
  45. DFS(u,);
  46. if(ok || col[u] == )
  47. return "NO";
  48. }
  49. for(int i=;i <= y;++i)
  50. {
  51. int u=b[i];
  52. if(col[u] == -)
  53. DFS(u,);
  54.  
  55. if(ok || col[u] == )
  56. return "NO";
  57. }
  58. for(int i=;i <= n;++i)
  59. {
  60. ok=false;
  61. if(col[i] == - && head[i] != -)
  62. DFS(i,);
  63.  
  64. if(ok)
  65. return "NO";
  66. }
  67. return "YES";
  68. }
  69. void Init()
  70. {
  71. num=;
  72. for(int i=;i <= n;++i)
  73. {
  74. col[i]=-;
  75. head[i]=-;
  76. }
  77. }
  78. int main()
  79. {
  80. // freopen("C:\\Users\\hyacinthLJP\\Desktop\\C++WorkSpace\\in&&out\\contest","r",stdin);
  81. while(~scanf("%d%d%d%d",&n,&m,&x,&y))
  82. {
  83. Init();
  84. for(int i=;i <= m;++i)
  85. {
  86. int u,v;
  87. scanf("%d%d",&u,&v);
  88. addEdge(u,v);
  89. addEdge(v,u);
  90. }
  91. for(int i=;i <= x;++i)
  92. scanf("%d",g+i);
  93. for(int i=;i <= y;++i)
  94. scanf("%d",b+i);
  95. puts(Solve());
  96. }
  97. return ;
  98. }

HDU 5971"Wrestling Match"(二分图染色)的更多相关文章

  1. hdu 5971 Wrestling Match 二分图染色

    题目链接 题意 \(n\)人进行\(m\)场比赛,给定\(m\)场比赛的双方编号:再给定已知的为\(good\ player\)的\(x\)个人的编号,已知的为\(bad\ player\)的\(y\ ...

  2. HDU 5971 Wrestling Match (二分图)

    题意:给定n个人的两两比赛,每个人要么是good 要么是bad,现在问你能不能唯一确定并且是合理的. 析:其实就是一个二分图染色,如果产生矛盾了就是不能,否则就是可以的. 代码如下: #pragma ...

  3. hdu 5971 Wrestling Match

    题目链接: hdu 5971 Wrestling Match 题意:N个选手,M场比赛,已知x个好人,y个坏人,问能否将选手划分成好人和坏人两个阵营,保证每场比赛必有一个好人和一个坏人参加. 题解:d ...

  4. hdu 5971 Wrestling Match 判断能否构成二分图

    http://acm.hdu.edu.cn/showproblem.php?pid=5971 Wrestling Match Time Limit: 2000/1000 MS (Java/Others ...

  5. A - Wrestling Match HDU - 5971

    Nowadays, at least one wrestling match is held every year in our country. There are a lot of people ...

  6. HDU 3081 Marriage Match II (二分图,并查集)

    HDU 3081 Marriage Match II (二分图,并查集) Description Presumably, you all have known the question of stab ...

  7. HDU 5971 二分图判定

    Wrestling Match Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  8. HDU2444 :The Accomodation of Students(二分图染色+二分图匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  9. HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)

    HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...

随机推荐

  1. VLSM(可变长子网掩码)

    http://blog.sina.com.cn/s/blog_635e1a9e0100yk51.html(转载) VLSM的介绍: VLSM(VLSM(Variable Length Subnetwo ...

  2. Leetcode705.Design HashSet设置哈希集合

    不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中是否存在这个值. rem ...

  3. SpringBoot 异步 定时任务 邮件

    springboot异步 一: 在 MyConfiguration.java 中开启注解 @Configuration//指明当前类是一个配置类:就是来替代之前的Spring配置文件@EnableAs ...

  4. sping,springMVC @Component 注解的对象都是单例模式,变量不能全局

    错误方式:      将属性和变量定义为全局,单例模式,所有人共享,导致所有人的数据都发生错误! 正确方式 一:    将变量定义到局部,互不影响. 正确方式 二:      假如必须放到全局所有方法 ...

  5. Python之整数类型

    整数:18,73,84 每一个整数都有如下的功能:class int(object): """ int(x=0) -> int or long int(x, bas ...

  6. php 常用类汇总

    转自:http://www.blhere.com/953.html 图表库 下面的类库可以让你很简单就能创建复杂的图表和图片.当然,它们需要GD库的支持. pChart - 一个可以创建统计图的库. ...

  7. HTML之HTML标签

    前端的三把利器:                      (1)HTML就像一个赤裸裸的人                      (2)css就好比一件衣服                   ...

  8. 【调试】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息(转载)

    在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量.有时在查看窗口显示的内容不是很直观.为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧.下面 ...

  9. JAVA高级特性--String/StringBuffer/Builder

    String String对象一旦创建就不能改变 是常量 需要进行大量字符串操作应采用StringBuffer/StringBuilder  最终结果转换成String对象 StringBuffer ...

  10. springboot项目启动,但是访问报404错误

    启动类Application上加了@ComponentScan(basePackages = {})这个注解导致controller扫描不到导致的,如果加了这个注解,springboot就不会扫描Ap ...