http://acm.hdu.edu.cn/showproblem.php?pid=5285

题意:把互不认识的人分到两个组,第一组人数尽可能多。

题解:把互不认识的人连起来,当作二分图,二分图可能有多个,对于没有连线的点,扔到第一个图里。二色法对每个二分图染色,记录每个图比较多的颜色的数量累计到答案里。

特判坑:n<=1 或者 m==0

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<math.h>
  6. #include<string>
  7. #include<map>
  8. #include<queue>
  9. #include<stack>
  10. #include<set>
  11. #define ll long long
  12. #define inf 0x3f3f3f3f
  13. using namespace std;
  14.  
  15. int n,m;
  16.  
  17. vector<int>a[];
  18. int color[];
  19. int zero,one;
  20. int minn,maxx;
  21. bool flag;
  22.  
  23. void bfs(int x)
  24. {
  25. queue<int>que;///对x点进行广搜,二色法,一个标记为0,另一个标记为1
  26. zero=one=;
  27. zero++;
  28. que.push(x);
  29. color[x]=;
  30. while(!que.empty()&&flag)
  31. {
  32. int now=que.front();
  33. que.pop();
  34. int c=color[now];
  35. int len=a[now].size();
  36. for(int i=;i<len;i++)
  37. {
  38. int next=a[now][i];
  39. if(color[next]==-)///如果没有被染色过,
  40. {
  41. que.push(next);
  42. if(c==)
  43. color[next]=,one++;
  44. else
  45. color[next]=,zero++;
  46. }
  47. else ///被染色过
  48. {
  49. if( color[next]==c )
  50. {
  51. flag=false;
  52. break;
  53. }
  54. }
  55. }
  56.  
  57. }
  58. }
  59.  
  60. int main()//hdu5285
  61. {
  62. int t;
  63. scanf("%d",&t);
  64. while(t--)
  65. {
  66.  
  67. scanf("%d%d",&n,&m);
  68.  
  69. for(int i=;i<=n;i++)
  70. a[i].clear();
  71. memset(color,-,sizeof(color));
  72. minn=maxx=;
  73. flag=true;
  74.  
  75. if(n<=)
  76. {
  77. printf("Poor wyh\n");
  78. continue;
  79. }
  80. if(m==)///特判,否则全部染成0色
  81. {
  82. printf("%d 1\n",n-);
  83. continue;
  84. }
  85.  
  86. while(m--)
  87. {
  88. int u,v;
  89. scanf("%d%d",&u,&v);
  90. a[u].push_back(v);
  91. a[v].push_back(u);
  92. }
  93. int no=;///没有被染色的点,其中第一组尽量多,则把没有染色的加到多的那一边去
  94. for(int i=;i<=n && flag;i++)
  95. {
  96.  
  97. if(color[i]==- && a[i].size() )///没有被染色的点 并且 不是独立的
  98. {
  99. bfs(i);
  100. if(zero<one)
  101. swap(zero,one);
  102. maxx+=zero;
  103. minn+=one;
  104. }
  105. else if(color[i]==- && a[i].size()==)///独立的点染成颜色0,0是第一组,较多的那一组
  106. {
  107. color[i]=;
  108. maxx++;
  109. }
  110. }
  111. if(flag)
  112. printf("%d %d\n",maxx,minn);
  113. else
  114. printf("Poor wyh\n");
  115. }
  116.  
  117. return ;
  118. }

hdu5285-wyh2000 and pupil-(染色法二分图判定)的更多相关文章

  1. 二分图判定+点染色/并查集 BestCoder Round #48 ($) 1002 wyh2000 and pupil

    题目传送门 /* 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 每一次二分图匹配时,将点多的集合加大最后第一个集合去 注意:n <= 1,no,两 ...

  2. HDU 5285 wyh2000 and pupil 判二分图+贪心

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5285 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  3. Wrestling Match---hdu5971(2016CCPC大连 染色法判断是否是二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5971 题意:有n个人,编号为1-n, 已知X个人是good,Y个人是bad,m场比赛,每场比赛都有一个 ...

  4. 染色法判断是否是二分图 hdu2444

    用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 ...

  5. hdu 2444(染色法判断二分图+最大匹配)

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

  6. poj 2942 Knights of the Round Table(点双连通分量+二分图判定)

    题目链接:http://poj.org/problem?id=2942 题意:n个骑士要举行圆桌会议,但是有些骑士相互仇视,必须满足以下两个条件才能举行: (1)任何两个互相仇视的骑士不能相邻,每个骑 ...

  7. HDU 5285 wyh2000 and pupil(dfs或种类并查集)

    wyh2000 and pupil Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Other ...

  8. 洛谷P1525 关押罪犯(并查集、二分图判定)

    本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...

  9. HDU 2444:The Accomodation of Students(二分图判定+匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:给出边,判断这个是否是一个二分图,并求最大匹配. 思路:先染色法求出是否是一个二分图,然后再匈牙利求 ...

随机推荐

  1. SpringBoot集成Spring Security(3)——异常处理

    源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.常见异常二.源码分析三.处理异常不知道你有没有注意到,当我们登陆失败时候,Spring securi ...

  2. 一篇了解大数据架构及Hadoop生态圈

    一篇了解大数据架构及Hadoop生态圈 阅读建议,有一定基础的阅读顺序为1,2,3,4节,没有基础的阅读顺序为2,3,4,1节. 第一节 集群规划 大数据集群规划(以CDH集群为例),参考链接: ht ...

  3. ng 打包给路径添加前缀

    1.ng build --base --href /前缀名/--common - chunk --output-hashing=all --optimization 2.更改ts和html中的路径,将 ...

  4. 阿里云服务器ECS安全组设置 允许ping

    另外也需要服务器的设置允许ping

  5. springboot 远程调试

    首先以调试模式启动编译好的jar包,监听端口为5005 java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,addre ...

  6. 一个简单 System.Threading.Tasks.Dataflow.BufferBlock 示例

    直接贴代码了: using System; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; namespace ...

  7. Problem 1059 老师的苦恼

    Bob写文章时喜欢将英文字母的大小写混用,例如Computer Science经常被他写成coMpUtEr scIeNce,这让他的英文老师十分苦恼,现在请你帮Bob的英文老师写一个程序能够将Bob的 ...

  8. 【Elasticsearch】【WEB】java web服务连接es elasticsearch始终报错,无法正常连接使用的错误解决历程

    前情提要: web服务往华为云上迁移 ================内网的好环境,相关配置=================== 1.web服务关于ES的集群配置如下: elasticAddress ...

  9. Application类-欢迎页(初始界面)

    在程序界面显示前,如果我们处理了很多耗时操作,这个时候给用户提示一个欢迎页便是十分友好的.WPF为我们提供了这个特性: 第一种方法:通过设置图片资源的生成操作 粘贴一个图片到我们的项目中 在解决方案管 ...

  10. 性能监控工具的配置及使用 - Spotlight On Oracle(oracle)

    一.    Spotlight On Oracle(oracle)1.1.   工具简介Spotlight是一个强有力的Oracle数据库实时性能诊断工具,提供了一个直观的.可视化的数据库活动展现.S ...