wyh2000 and pupil

 Accepts: 93
 Submissions: 925
 Time Limit: 3000/1500 MS (Java/Others)
 Memory Limit: 131072/65536 K (Java/Others)
问题描写叙述
青年理论计算机科学家wyh2000在教导他的小学生。
共同拥有n个小学生,编号为1−n。为了添加小学生之间的凝聚力,wyh2000决定将全部小学生分成2组,每组都至少有1个人。
可是有些小学生之间并不认识,并且假设a不认识b,那么b也不认识a。 Wyh2000希望每组中的小学生都互相认识。并且第一组的人要尽可能多。
请你帮wyh2000求出第一组和第二组的人数是多少。假设找不到分组方案,则输出"Poor wyh"。
输入描写叙述
第一行一个数T,表示数据组数。
对于每组数据,第一行两个数n,m,表示小学生数量和互相不认识的小学生的数量。 接下来m行,每行两个数x,y(x<y),表示x不认识y,y不认识x。 保证一对(x,y)仅仅会出现一次。 T≤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
/*
Author: 2486
Memory: 7448 KB Time: 592 MS
Language: G++ Result: Accepted
VJ RunId: 4055769 Real RunId: 14058285
Public: No Yes
*/
/*
假设a不认识b,那么在a,b间连一条边,这样有解当且仅当这张图是二分图。
由于可能有多个二分图。而题目要求第一组的人尽可能多,所以贪心的选择就可以。 要注意m=0的情况。 */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=100000+5;
vector<int>G[maxn];
int col[maxn],T;
int n,m,a,b,acnt,bcnt;
void init(int x) {
for(int i=1; i<=x; i++) {
G[i].clear();
}
}
bool bfs(int u) {
queue<int>k;
k.push(u);
col[u]=1;
while(!k.empty()) {
int s=k.front();
if(col[s]==1)acnt++;
else bcnt++;
k.pop();
for(int i=0; i<G[s].size(); i++) {
if(col[G[s][i]]==-1) {
col[G[s][i]]=!col[s];
k.push(G[s][i]);
continue;
}
if(col[G[s][i]]==col[s])return false;
}
}
return true;
}
void slove() {
memset(col,-1,sizeof(col));
bool flag=false;
int Max=0;
for(int i=1; i<=n; i++) {
acnt=0,bcnt=0;
if(col[i]==-1&&!bfs(i)) {
flag=true;
break;
}
Max+=max(acnt,bcnt);//必须这么做,由于这里面为1的或者为0的不一定就是同一阵营。 }
if(flag)printf("Poor wyh\n");
else printf("%d %d\n",Max,n-Max);
}
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&m);
init(n);
for(int i=0; i<m; i++) {
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
if(n<2) {//题目要求
printf("Poor wyh\n");
continue;
}
if(m==0) {//题目要求
printf("%d 1\n",n-1);
continue;
}
slove();
}
return 0;
}

wyh2000 and pupil的更多相关文章

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

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

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

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

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

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

  4. HDU 5285:wyh2000 and pupil

    wyh2000 and pupil  Accepts: 93  Submissions: 925  Time Limit: 3000/1500 MS (Java/Others)  Memory Lim ...

  5. HDU 5285 wyh2000 and pupil (二分图着色)

    题意: 共有n个小学生,编号为1−n.将所有小学生分成2组,每组都至少有1个人.但是有些小学生之间并不认识,而且如果a不认识b,那么b也不认识a.Wyh2000希望每组中的小学生都互相认识.而且第一组 ...

  6. HDU 5285 wyh2000 and pupil

    题意:有一群人,已知某两人之间互相不认识,要把这群人分成两部分,每部分至少一人,且在每部分内没有人互不认识. 解法:图染色.某场bestcoder第二题……看完题觉得是个二分图……完全不会二分图什么的 ...

  7. hdu 5285 wyh2000 and pupil(二染色)

    第一次用vector解得题.值得纪念,这道题是二染色问题,我用bfs解得.就是染色,推断,计数问题,其 实挺简单的,就是得判一下特殊情况,当n<2的时候就不能有解,由于题目要求每一个组至少有一个 ...

  8. Hdu 5285 wyh2000 and pupil (bfs染色判断奇环) (二分图匹配)

    题目链接: BestCoder Round #48 ($) 1002 题目描述: n个小朋友要被分成两班,但是有些小朋友之间是不认得的,所以规定不能把不认识的小朋友分在一个班级里面,并且一班的人数要比 ...

  9. ACM: HDU 5285 wyh2000 and pupil-二分图判定

     HDU 5285  wyh2000 and pupil Time Limit:1500MS     Memory Limit:65536KB     64bit IO Format:%I64d &a ...

随机推荐

  1. DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比

    1. DOM(Document Object Model)文档对象模型1. DOM是W3C指定的一套规范标准,核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的&qu ...

  2. document文档碎片

    var arrText = ["1","2","3","4","5","6",& ...

  3. unittest跳过测试和预期失败

    在运行测试时,有时需要直接跳过某些测试用例,或者当用例符合某个条件时跳过测试,又或者直接将测试用例设置为失败.unittest提供了这些需求的装饰器. unittest.skip(reason) 无条 ...

  4. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) D. Field expansion

    D. Field expansion time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  5. 如何解决 错误code signing is required for product type 'xxxxx' in SDK 'iOS 8.2'

    如何解决 错误code signing is required for product type 'xxxxx' in SDK 'iOS 8.2' 大家在做真机调试的时候,或许会遇到这样的问题,那如何 ...

  6. ElasticSearch分词器

    什么是分词器? 分词器,是将用户输入的一段文本,分析成符合逻辑的一种工具.到目前为止呢,分词器没有办法做到完全的符合人们的要求.和我们有关的分词器有英文的和中文的.英文的分词器过程:输入文本-关键词切 ...

  7. 【BZOJ1412】狼和羊的故事(最小割)

    题意:将一个由0,1,2构成的矩阵里的1与2全部分割最少需要选取多少条边 n,m<=100 思路:裸的最小割模型 相邻的格子连容量为1的边(其实可以少连很多遍,1与1,2与2之间的边是没有意义的 ...

  8. echarts3样例

    <script type="text/javascript" src="echarts.min.js"></script> <di ...

  9. js Math [ 随机数、绝对值、四舍五入、进一取整、舍去取整、最大值、最小值、圆周率 ]

    <script> /* 数学对象:Math */ with (document) { write('<br>-3.5的绝对值:'+Math.abs(-3.5)); write( ...

  10. POJ 1509 Glass Beads【字符串最小表示法】

    题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串 ...