题意:有一群人,已知某两人之间互相不认识,要把这群人分成两部分,每部分至少一人,且在每部分内没有人互不认识。

解法:图染色。某场bestcoder第二题……看完题觉得是个二分图……完全不会二分图什么的……但是为了挣扎一下百度了一下二分图的判定方法,知道了可以用染色法,这样如果是二分图的话将每个连通分量里点数量最多的颜色的点数量(像个绕口令诶)相加就可以了。然而激动万分的我早忘了还有每部分至少一人这个条件……直到我和队友研究怎么hack别人的时候他才告诉我还有这么个条件……(哭)还好来得及……

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
int vis[100005];
vector <int> v[100005];
int bfs(int u)
{
queue <int> q;
q.push(u);
vis[u] = 0;
int res[2] = {1, 0};
while(!q.empty())
{
int tmp = q.front();
q.pop();
int len = v[tmp].size();
for(int i = 0; i < len; i++)
{
if(vis[v[tmp][i]] == -1)
{
vis[v[tmp][i]] = !vis[tmp];
q.push(v[tmp][i]);
res[vis[v[tmp][i]]]++;
}
else if(vis[v[tmp][i]] == vis[tmp])
return -1;
}
}
return max(res[0], res[1]);
}
int main()
{
int T;
while(~scanf("%d", &T))
{
while(T--)
{
int n, m;
for(int i = 0; i < 100005; i++)
v[i].clear();
memset(vis, -1, sizeof vis);
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
int ans = 0;
for(int j = 1; j <= n; j++)
{
if(vis[j] == -1)
{
int tmp = bfs(j);
if(tmp == -1)
{
ans = -1;
break;
}
else
{
ans += tmp;
}
}
}
if(ans == -1 || (ans == n && n < 2))
{
puts("Poor wyh");
}
else if(ans != n)
printf("%d %d\n", ans, n - ans);
else
printf("%d %d\n", ans - 1, n - ans + 1);
}
}
return 0;
}

  

最新文章

  1. Rails :布局和视图渲染
  2. [php-src]窥探Php内核中的数组与面向对象
  3. Hadoop生态系统
  4. C++虚函数、赋值兼容原则
  5. Python3 学习第九弹: 模块学习二之文件管理模块
  6. asp.net清除页面缓存防止同时登录
  7. Oracle EBS 预警系统管理
  8. c语言学习之基础知识点介绍(十三):枚举的介绍和使用
  9. GitHub与Versions
  10. Eclips入门教程
  11. search_word
  12. java.lang.OutOfMemoryError异常解决方法
  13. Python系列之模块、和字符串格式化
  14. popup方法
  15. vue1.0中$index一直报错的解决办法
  16. web服务器,验证码,Xftp使用方法
  17. Android双击Home键返回桌面
  18. python 名称前的单下划线
  19. Lodop打印较大的超出纸张的图片
  20. 作业20171116 beta2及beta发布 成绩

热门文章

  1. bnuoj 29375 Two Strings(字符串?)
  2. poj 3522 Slim Span (最小生成树kruskal)
  3. zTree -- jQuery 树插件
  4. robots.txt协议-互联网robots搜索规范
  5. Samza在YARN上的启动过程 =》 之一
  6. CloudTest 事务监控:千呼万唤始出来
  7. DJANGO结合jQuery cxSelect 作二级菜单过滤
  8. CodeForce 339:A+B+C
  9. JNI和NDK的区别
  10. IOS - IOS之同步请求、异步请求、GET请求、POST请求