第一次用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(二染色)的更多相关文章

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

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

  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. HDU 5285 wyh2000 and pupil(dfs或种类并查集)

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

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

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

  5. HDU 5285 wyh2000 and pupil

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

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

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

  7. HDU 5285:wyh2000 and pupil

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

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

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

  9. NOIP2010关押罪犯 二分+二染色

    这个题一上来 没有思路,后来想没有思路就二分吧 那么我们来二分 首先,大于当前的mid值的关系,不能出现在一个集合里 (即关系形成的图是一个二分图,判定二分图可以二染色) 如果不能形成二分图,那么说明 ...

随机推荐

  1. appium python学习记录

    这是网上找到的测试用例 from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' ...

  2. 3. Spring Boot热部署【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/51584549 在编写代码的时候,你会发现我们只是简单把打印信息改变了下,就需要重新部署,如 ...

  3. 【高级功能】使用 Ajax

    Ajax 是现代Web 应用程序开发的一项关键工具.它让你能向服务器异步发送和接收数据,然后用 Javascript 解析. Ajax 是 Asynchronous JavaScript and XM ...

  4. XP中如何配置和共享打印机

    Win XP中如何配置和共享打印机                一.配置  打印机 在"控制面板"打开"打印机和传真",在左边的选项或单击右键选择" ...

  5. Android学习(七) Android实现计算器

    前台页面代码,通过线性布局方式实现计算器页面:如图所示 color.xml,自定义颜色values: <?xml version="1.0" encoding="u ...

  6. Step 2---有关Github的几个问题

    1.取得项目的Git仓库的方式 第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行: $ git init 初始化 ...

  7. Android 创建Listener监听器形式选择:匿名内部类?外部类?

    说到监听器,第一感觉就是直接写作匿名内部类来用,可是依据单一职责原则,好像又不应该作为匿名内部类来写(由于监听中有时要写较多的逻辑代码),所曾经段时间把有共性的listener单独创建放在glut.l ...

  8. 2015级C++第7周项目 友元、共享数据保护、多文件结构

    [项目1-成员函数.友元函数和一般函数有差别]參考解答 (1)阅读以下的程序,体会凝视中的说明(要执行程序,请找到课程主页并复制代码) //例:使用成员函数.友元函数和一般函数的差别 #include ...

  9. 编辑器未包含main类型

    明明写了main函数,在运行的时候,却得到这样的结果. 解决方案: 重新建立一个项目,建立项目的过程中

  10. MVC| Razor 布局-模板页 | ViewStart.cshtml

    来自:http://blog.csdn.net/fanbin168/article/details/49725175 这个图就看明白了 _ViewStart.cshtml 视图文件的作用  _View ...