wyh2000 and pupil

Accepts: 93
Submissions: 925
Time Limit: 3000/1500 MS (Java/Others)
Memory Limit: 131072/65536 K (Java/Others)

问题描述
青年理论计算机科学家wyh2000在教导他的小学生。
共有nnn个小学生,编号为1−n1-n1−n。为了增加小学生之间的凝聚力,wyh2000决定将所有小学生分成222组,每组都至少有111个人。
但是有些小学生之间并不认识,而且如果aaa不认识bbb,那么bbb也不认识aaa。
Wyh2000希望每组中的小学生都互相认识。而且第一组的人要尽可能多。
请你帮wyh2000求出第一组和第二组的人数是多少。如果找不到分组方案,则输出"Poor wyh"。
输入描述
第一行一个数TTT,表示数据组数。
对于每组数据,第一行两个数n,mn,mn,m,表示小学生数量和互相不认识的小学生的数量。
接下来mmm行,每行两个数x,y(x<y)x,y(x < y)x,y(x<y),表示xxx不认识yyy,yyy不认识xxx。保证一对(x,y)(x,y)(x,y)只会出现一次。
T≤10,0≤n,m≤100000T\leq10,0\leq n,m\leq100000T≤10,0≤n,m≤100000
输出描述
对于每组数据,输出答案。
输入样例
2
8 5
3 4
5 6
1 2
5 8
3 5
5 4
2 3
4 5
3 4
2 4
输出样例
5 3
Poor wyh

问题:分出两个集合、保证一组至少有一个人,并且第一组人尽量的多、

我们这里假设a和b不认识,b和c不认识,但是a和c是认识的、所以我们这里假设染色a为1,b染色为2,通过b找到c,染色c为1,那么a,c就是一个集合里边的元素。所以我们这里可以应用染色法来解决这个问题,题目中问的不是最大匹配问题,我们这里要判断整张图是不是二分图,如果不是,那么是不行的。

所以我们确定了解决问题的方法:二分+染色、

这里有两个坑,一个是n==1的时候,问题保证每个组都至少要有1个人,这个时候要输出poor,另外如果n==0的时候,也要输出poor、

这里我们直接上代码:

#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;
vector<int >map[1000005];
int color[1000005];
int ans;
int bfs(int x)
{queue<int >s;int one=0;int two=0;s.push(x);color[x]=1;one++;while(!s.empty()){int u=s.front();s.pop();for(int i=0;i<map[u].size();i++){int v=map[u][i];if(color[v]){if(color[v]==color[u]){return 0;}}else{color[v]=3-color[u];if(color[v]==1){one++;}else{two++;}s.push(v);}}}ans+=max(one,two);return 1;
}
int main()
{int t;scanf("%d",&t);while(t--){int n,m;ans=0;scanf("%d%d",&n,&m);for(int i=0;i<=n;i++){map[i].clear();}memset(color,0,sizeof(color));if(n==0){printf("Poor wyh\n");continue;}for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);map[x].push_back(y);map[y].push_back(x);}int ok=0;for(int i=1;i<=n;i++){if(color[i]!=0)continue;else{if(bfs(i)==0){ok=1;break;}}}if(ok==1){printf("Poor wyh\n");}else{if(m==0){if(ans==1){printf("Poor wyh\n");}else{printf("%d %d\n",ans-1,1);}}else{printf("%d %d\n",ans,n-ans);}}}
}

hdu 5285 wyh2000 and pupil【二分图+染色法】相关推荐

  1. [POJ2942]:Knights of the Round Table(塔尖+二分图染色法)

    题目传送门 题目描述 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: 1.相互憎恨的两个骑士不能坐在直接相邻 ...

  2. hdu 5285(染色法判断二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5285 解题思路:很明显的是二分图的判定,用染色法即可. 不过这题有一个坑,当n<=1和m=0时要 ...

  3. AcWing 860. 染色法判定二分图 (染色法)

    题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环. 请你判断这个图是否是二分图. 输入输出格式 : 输入 第一行包含两个整数 n 和 m. 接下来 m ...

  4. 二部图判定算法之染色法

    二部图判定算法之染色法 什么是二部图? 什么是染色法? 算法初始化条件 算法步骤及流程 算法复杂度 什么是二部图? 二部图又称作二分图或偶图,是图论中的一种特殊模型.设 G=(V , E) 是一个无向 ...

  5. LeetCode 785. 判断二分图(染色法)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A ...

  6. AcWing 860. 染色法判定二分图(染色法)

    题目连接 https://www.acwing.com/problem/content/862/ 思路 我们对每一个节点进行染色操作,我们需要注意的是我们染色后要将当前节点的所有相邻节点全部染成另一种 ...

  7. 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)

    本文概论 二分图的判断方法:图中不存在奇数环----->染色法判断二分图不存在矛盾 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i, ...

  8. hdu 5285 二分图黑白染色

    题意:给出 n 个人,以及 m 对互不认识的关系,剩余的人都互相认识,要将所有人分成两组,组内不能有互不认识的人,要求每组至少有一人,并且第一组人数尽量多,问两组人数或不可能时单独输出 BC 48 场 ...

  9. Treelabeling 异或性质,位运算,染色法,二分图(2100)

    题意 : 给一个结点1-n的树,E先手,将棋子放在其中一个结点上,S后手,棋子每次移动有三个条件要满足:1.结点相邻:2.结点未被访问:3.

  10. 【hdu5285】wyh2000 and pupil

    今天下午的二分图染色给我开启新世界的大门啊2333333 这个题要比刚才的关押罪犯简单,只需要染一遍色就能求出答案 #include<iostream> #include<cstri ...

最新文章

  1. windows系统下jenkins环境搭建与基本使用
  2. 谷歌入华,抢在搜索之前的是Waymo无人驾驶
  3. Java基础--类与对象
  4. 【Java代码】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写【去除外层循环:可用于Map对象中的key全部转化为大写或者小写】
  5. 花式迎新 百度李彦宏Robin化身大厨派发肉饼
  6. html和c的区别,tn-s系统与TN-C的区别是什么
  7. win10鼠标指针修改
  8. centos7.3安装与配置SVN
  9. Hypervisor 技术的演进
  10. 口袋妖怪金心银魂详细图文攻略(下)及游戏下载
  11. 作者谈《阿里巴巴Java开发手册(规约)》背后的故事
  12. 系统分析师-2021年下午简答题
  13. hackerrank初级篇之Mini-Max Sum
  14. 中国兽医血液分析仪行业市场供需与战略研究报告
  15. 概率问题的求解 —— 样本空间
  16. 哈希表、红黑树、B树、B+树基础
  17. 判断一个多边形是否是凸多边形
  18. RabbitMQ镜像队列原理分析
  19. AI目标分割能力,无需绿幕即可实现快速视频抠图
  20. Android UIL图片加载缓存源码分析-内存缓存

热门文章

  1. oracle函数按周,关于oracle按日周月分组统计以及next_day()函数详解
  2. java雪崩_了解java架构之微服务架构—雪崩效应
  3. 安卓 播放MP3 实现歌词同步例子
  4. Aerospike SSD模式下,刷写磁盘和写入数据swb的关系
  5. windows Mac 虚拟机显示模糊的问题
  6. python绘制图像并渲染_用Python的Matplotlib模块绘制3D图像
  7. 洛谷P3604 美好的每一天(莫队)
  8. matlab floor函数用法,matlab中fix, floor, ceil, round 函数的使用方法
  9. 利用python爬取数据并保存到MySQL中
  10. 关于第一次深度学习项目的总结