很明显要求一个二分图。先构图,然后用精典的点染色的方法,求出二分图中两个图的节点数量

因为整个图中有很多个通块,每个通块都做一次二分图

合并的时候,把每个二分图中节点多的那部分的数量累加,就得到了a答案

那么b就是总数减去a

这题本身不难,但是数据非常贱,题目要求每组中必须有一个人,且m可能为0

所以,要进行两个特判

n<=1时,不可能每组至少1人,直接输出Poor wyh

m==0时,没有任何限制,但是b组至少要一个人,所以输出n-1  1(有无数人在这里wa了貌似kuangbin也是)

然后还可能爆栈(虽然最终测评里没有,,还好没这样出数据)

#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<functional>
#include<algorithm>using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
#pragma comment(linker,"/STACK:102400000,102400000")const int MX = 100000 + 5;
const int INF = 0x3f3f3f3f;int vis[MX];
vector<int>G[MX];bool DFS(int u, int c, int &a, int &b) {b++;if(c) a++;vis[u] = c;for(int i = 0; i < G[u].size(); i++) {int v = G[u][i];if(vis[v] == c) return false;if(vis[v] == -1 && !DFS(v, c ^ 1, a, b)) return false;}return true;
}int main() {int T, n, m;scanf("%d", &T);while(T--) {memset(vis, -1, sizeof(vis));scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) {G[i].clear();}for(int i = 1; i <= m; i++) {int u, v;scanf("%d%d", &u, &v);G[u].push_back(v);G[v].push_back(u);}if(n <= 1) {printf("Poor wyh\n");continue;}if(m == 0) {printf("%d 1\n", n - 1);continue;}bool sign = true;int Max = 0;for(int i = 1; i <= n; i++) {int a = 0, b = 0;if(vis[i] == -1) {if(!DFS(i, 0, a, b)) {sign = false;break;}Max += max(a, b - a);}}if(!sign) printf("Poor wyh\n");else {printf("%d %d\n", Max, n - Max);}}return 0;
}

二分图判定 hdu5285 wyh2000 and pupil相关推荐

  1. POJ2942 Knights of the Round Table 点双连通分量 二分图判定

    题目大意 有N个骑士,给出某些骑士之间的仇恨关系,每次开会时会选一些骑士开,骑士们会围坐在一个圆桌旁.一次会议能够顺利举行,要满足两个条件:1.任意相互憎恨的两个骑士不能相邻.2.开会人数为大于2的奇 ...

  2. 【二分图判定】hdu3478 Catch

    详细的题解:http://www.docin.com/p-517243379.html 一个图是二分图 等价于 其至少有两个节点且没有奇环. 二分图判定的方法:从任意点出发进行一次dfs黑白染色,若某 ...

  3. 算法笔记--二分图判定

    算法笔记 挑战程序设计p98 #include<bits/stdc++.h> using namespace std; #define ll long long #define ls rt ...

  4. 【hdu5285】wyh2000 and pupil

    今天下午的二分图染色给我开启新世界的大门啊2333333 这个题要比刚才的关押罪犯简单,只需要染一遍色就能求出答案 #include<iostream> #include<cstri ...

  5. POJ - 2942 Knights of the Round Table(点双缩点+二分图判定)

    题目链接:点击查看 题目大意:国王要在圆桌上召开骑士会议,但是有若干对骑士之间互相憎恨.出于各种各样奇怪的原因,每次开会都必须有以下要求: 相互憎恨的两个骑士不能坐在相邻的两个位置 为了让投票表决议题 ...

  6. CH - 4901 关押罪犯(二分图判定+二分/并查集)

    题目链接:点击查看 题目大意:一共有n个罪犯,有m对仇人,每对仇人都有一个仇恨值,如果两个仇人在一起的话,会对监狱造成等价于仇恨值的损失,现在有两个监狱,可以将罪犯们分开关押,问监狱的最小损失是多少 ...

  7. POJ 2942 Knights of the Round Table ★(点双连通分量+二分图判定)

    题意:找出图中不可能在奇圈中的点. [分析]注意到,在不同点双连通分量中的两个点,显然是不会存在圈的.那么这样,问题就划归为在点双连通分量中去找奇圈. [重要性质]在一个点双连通分量中,只要有任意一个 ...

  8. uva 11396Claw Decomposotion(二分图判定)

     题目大意:给出一个简单无向图.每一个点的度为3.推断是否能将此图分解成若干爪的形式,使得每条边都仅仅出如今唯一的爪中. (点能够多次出如今爪中) 这道题实质上就是问这个图是否为二分图,dfs判定 ...

  9. 圆桌骑士(点双联通分量+二分图判定)

    [问题描述]   有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少有3个骑士参加,且相互憎恨的骑士不能坐在圆桌的相邻位置.如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是大于1的奇 ...

  10. 二分图判定二分图最大匹配模板

    二分图定义 可以把所有的点划分成两个集合,集合内部不存在边,集合之间存在边: 01染色判定二分图 性质 一个图是二分图等价于不存在奇数环 奇数环是指点的个数是奇数的环,如下图: 有一个通俗的解释,奇数 ...

最新文章

  1. perconadb mysql_是时候用PerconaDB替换MySQL了
  2. 脚踏开关 FOOTSwitch
  3. global 和 nonlocal关键字
  4. mongodb模糊查询包含特殊字符
  5. 网络工程师面试PK--胜者为王
  6. 表单按钮实现 type=image
  7. mysql优化--叶金荣老师讲座笔记
  8. leetcode 88 Merge Sorted Array
  9. 贝叶斯方法学习笔记(二)
  10. SpringCloud实现集群和负载均衡
  11. C3模块-空洞可分离卷积存在的问题及轻量化语义分割模型架构技巧
  12. cmd命令提示符配置切换IP地址
  13. 整数平方根:整数开方及大整数开方解决方法
  14. CookieSession
  15. 完爆90%的数据库性能毛病!
  16. layui 卡片式列表_CardView實現卡片式列表展示
  17. 真正厉害的人,都在延迟满足
  18. php7.1 rc,解决Windows上编译PHP7.1拓展的错误
  19. linux内存写保护,[原创]不用CR0或MDL修改内核非分页写保护内存的一种思路(x64)
  20. 结合Elementplus源码讲解BEM的使用

热门文章

  1. 模拟实现memcmp
  2. 路由器桥接显示无法连接服务器,路由器无法桥接怎么办
  3. python输入姓名输出欢迎你某某同学_2018-03-24 python 练习
  4. 专访Riverbed CEO:私有化和出售业务瘦身后的Riverbed更专注
  5. 吃饭?睡觉?打豆豆?
  6. 计算机桌面如何整理,怎么整理电脑桌面
  7. 学期博客:学习进度条
  8. java基础面经--下
  9. 盘点世界最牛的90后黑客,厉害到你无法想象的程度
  10. 读了下神书 Introduction to Linear Optimization