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值的关系,不能出现在一个集合里 (即关系形成的图是一个二分图,判定二分图可以二染色) 如果不能形成二分图,那么说明 ...
随机推荐
- appium python学习记录
这是网上找到的测试用例 from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' ...
- 3. Spring Boot热部署【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/51584549 在编写代码的时候,你会发现我们只是简单把打印信息改变了下,就需要重新部署,如 ...
- 【高级功能】使用 Ajax
Ajax 是现代Web 应用程序开发的一项关键工具.它让你能向服务器异步发送和接收数据,然后用 Javascript 解析. Ajax 是 Asynchronous JavaScript and XM ...
- XP中如何配置和共享打印机
Win XP中如何配置和共享打印机 一.配置 打印机 在"控制面板"打开"打印机和传真",在左边的选项或单击右键选择" ...
- Android学习(七) Android实现计算器
前台页面代码,通过线性布局方式实现计算器页面:如图所示 color.xml,自定义颜色values: <?xml version="1.0" encoding="u ...
- Step 2---有关Github的几个问题
1.取得项目的Git仓库的方式 第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行: $ git init 初始化 ...
- Android 创建Listener监听器形式选择:匿名内部类?外部类?
说到监听器,第一感觉就是直接写作匿名内部类来用,可是依据单一职责原则,好像又不应该作为匿名内部类来写(由于监听中有时要写较多的逻辑代码),所曾经段时间把有共性的listener单独创建放在glut.l ...
- 2015级C++第7周项目 友元、共享数据保护、多文件结构
[项目1-成员函数.友元函数和一般函数有差别]參考解答 (1)阅读以下的程序,体会凝视中的说明(要执行程序,请找到课程主页并复制代码) //例:使用成员函数.友元函数和一般函数的差别 #include ...
- 编辑器未包含main类型
明明写了main函数,在运行的时候,却得到这样的结果. 解决方案: 重新建立一个项目,建立项目的过程中
- MVC| Razor 布局-模板页 | ViewStart.cshtml
来自:http://blog.csdn.net/fanbin168/article/details/49725175 这个图就看明白了 _ViewStart.cshtml 视图文件的作用 _View ...