hdu 5285 wyh2000 and pupil(二染色)
第一次用vector解得题。值得纪念,这道题是二染色问题,我用bfs解得。就是染色,推断,计数问题,其
实挺简单的,就是得判一下特殊情况,当n<2的时候就不能有解,由于题目要求每一个组至少有一个人。当没有不认识的
人的时候就是一个组是n-1,还有一个组人数为1
上代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int visit[100005];
int n,m,flag,ans1,ans2;
vector<int>v[100005];
int bfs(int x)
{
queue<int>q;
q.push(x);
visit[x] = 1;
while(!q.empty())
{
int y = q.front();
q.pop();
if(visit[y] == 1)
ans1++;
else
ans2++;
for(int i=0; i<v[y].size(); i++)
{
if(visit[v[y][i]]==-1)
{
visit[v[y][i]] = !visit[y];
q.push(v[y][i]);
}
else
{
if(visit[v[y][i]]==visit[y])
{
return 0;
}
}
}
}
return 1;
}
void solve()
{
int Max = 0;
memset(visit,-1,sizeof(visit));
for(int i=1; i<=n; i++)
{
ans1 = ans2 =0;
//printf("size = %d i = %d\n",v[i].size(),i);
if(v[i].size()==0)
continue;
if(visit[i]==-1&&!bfs(i))
{
flag = 1;
break;
}
Max += min(ans1,ans2); //printf("ans1 = %d ans2 = %d\n",ans1,ans2);
}
if(flag)
printf("Poor wyh\n");
else
printf("%d %d\n",n - Max,Max);
return ; }
int main()
{
int T,c,i,j,a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
v[i].clear();
for(i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
if(n < 2)
{
puts("Poor wyh");
continue;
}
if(m == 0)
{
printf("%d 1\n",n-1);
continue;
}
flag = 0;
solve();
}
return 0;
}
hdu 5285 wyh2000 and pupil(二染色)的更多相关文章
- Hdu 5285 wyh2000 and pupil (bfs染色判断奇环) (二分图匹配)
题目链接: BestCoder Round #48 ($) 1002 题目描述: n个小朋友要被分成两班,但是有些小朋友之间是不认得的,所以规定不能把不认识的小朋友分在一个班级里面,并且一班的人数要比 ...
- HDU 5285 wyh2000 and pupil 判二分图+贪心
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5285 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- HDU 5285 wyh2000 and pupil(dfs或种类并查集)
wyh2000 and pupil Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Other ...
- HDU 5285 wyh2000 and pupil (二分图着色)
题意: 共有n个小学生,编号为1−n.将所有小学生分成2组,每组都至少有1个人.但是有些小学生之间并不认识,而且如果a不认识b,那么b也不认识a.Wyh2000希望每组中的小学生都互相认识.而且第一组 ...
- HDU 5285 wyh2000 and pupil
题意:有一群人,已知某两人之间互相不认识,要把这群人分成两部分,每部分至少一人,且在每部分内没有人互不认识. 解法:图染色.某场bestcoder第二题……看完题觉得是个二分图……完全不会二分图什么的 ...
- ACM: HDU 5285 wyh2000 and pupil-二分图判定
HDU 5285 wyh2000 and pupil Time Limit:1500MS Memory Limit:65536KB 64bit IO Format:%I64d &a ...
- HDU 5285:wyh2000 and pupil
wyh2000 and pupil Accepts: 93 Submissions: 925 Time Limit: 3000/1500 MS (Java/Others) Memory Lim ...
- 二分图判定+点染色/并查集 BestCoder Round #48 ($) 1002 wyh2000 and pupil
题目传送门 /* 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 每一次二分图匹配时,将点多的集合加大最后第一个集合去 注意:n <= 1,no,两 ...
- NOIP2010关押罪犯 二分+二染色
这个题一上来 没有思路,后来想没有思路就二分吧 那么我们来二分 首先,大于当前的mid值的关系,不能出现在一个集合里 (即关系形成的图是一个二分图,判定二分图可以二染色) 如果不能形成二分图,那么说明 ...
随机推荐
- setSystemUiVisibility() 与 getSystemUiVisibility() 显示隐藏状态栏
Android 4.4 Camera 源码里面有一个操作界面的方法: /** * If {@param visible} is false, this hides the action bar a ...
- Kwickserver
Kwickserver 欢迎来到Kwickserver的主页 Kwickserver是什么? Kwickserver是一个易于安装的和易于使用的服务器应用程序,从CD安装在PC兼容的硬件和坚持webi ...
- git学习——撤销操作
修改最后一次提交:--amend 在提交完成后发现漏掉了几个文件没有加进去,或者提交信息写错了.想要修改怎么办? 现在可以先把需要修改的信息进行修改如:git add 添加没有添加的文件,vim &l ...
- Solidworks如何在装配图中保存单独的一个零件
如下图所示,我想要保存装配体的一个单独的零部件 选中该零件后点击编辑零部件 然后点击顶部的文件-另存为,弹出"解决模糊情形"对话框,询问你要保存装配体还是零部件 点击确 ...
- 【BIEE】10_资料库查看数据报错
导入元数据后,在资料库右键物理表名,[查看数据]报错: 出现这个问题,没搞明白是为啥- 后来百度意外发现一个方法,修改NQSConfig.INI文件即可解决问题 那么就开始来搞定这个问题 [1]打开路 ...
- iOS项目工程添加.a文件遇到的Dsymutil Error
将.a文件加入工程,很多教程讲的都是: 右键选择Add->Existing Files…,选择.a文件和相应的.h头文件.或者将这两个文件拖入XCode工程目录结构中,在弹出的界面中勾选Copy ...
- PICT工具安装使用
前言:PICT工具在微软公司出品一款成对组合的命令行生成工具.PICT 可有效地按照两两测试Pairwise的原理,进行测试用例设计.在使用PICT时,需要输入与测试用例相关的所有参数,以达到全面覆盖 ...
- 隔行换色table
<style type="text/css"> table { margin: 0 auto; width: 600px; } table { border: 1px ...
- CSS遮罩层,全兼容
<script type="text/javascript"> $(function(){ $('#divLocker').css({ "position&q ...
- different between method and function
A method is on an object. A function is independent of an object. For Java, there are only methods. ...