hdu 5285 dfs染色+贪心(bc #48 B)
来源:互联网 发布:北山狼淘宝 编辑:程序博客网 时间:2024/04/29 18:10
题意:
问题描述
青年理论计算机科学家wyh2000在教导他的小学生。共有n 个小学生,编号为1−n 。为了增加小学生之间的凝聚力,wyh2000决定将所有小学生分成2 组,每组都至少有1 个人。但是有些小学生之间并不认识,而且如果a 不认识b ,那么b 也不认识a 。Wyh2000希望每组中的小学生都互相认识。而且第一组的人要尽可能多。请你帮wyh2000求出第一组和第二组的人数是多少。如果找不到分组方案,则输出"Poor wyh"。
输入描述
第一行一个数T ,表示数据组数。对于每组数据,第一行两个数n,m ,表示小学生数量和互相不认识的小学生的数量。接下来m 行,每行两个数x,y(x<y) ,表示x 不认识y ,y 不认识x 。保证一对(x,y) 只会出现一次。T≤10,0≤n,m≤100000
输出描述
对于每组数据,输出答案。
输入样例
28 53 45 61 25 83 55 42 34 53 42 4
输出样例
5 3Poor wyh
解析:
dfs染色,加一个贪心。
cntA, cntB 用来计算当前组内人的个数,然后要取大的。
最后直接判断,如果相邻点染的是同一种颜色,就false。
代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long long#define lson lo, mi, rt << 1#define rson mi + 1, hi, rt << 1 | 1using namespace std;const int maxn = 100000 + 10;const int inf = 0x3f3f3f3f;const double eps = 1e-8;const double pi = acos(-1.0);const double ee = exp(1.0);int cntA;int cntB;int col[maxn];int n, m;vector<int> g[maxn];void init(){ memset(col, -1, sizeof(col)); for (int i = 1; i <= n; i++) { g[i].clear(); }}void dfs(int u, int color){ col[u] = color; if (color) cntA++; else cntB++; for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (col[v] == -1) { dfs(v, !color); } }}int main(){#ifdef LOCAL freopen("in.txt", "r", stdin);#endif // LOCAL int ncase; scanf("%d", &ncase); while (ncase--) { scanf("%d%d", &n, &m); init(); for (int i = 0; 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; } int ans = 0; bool flag = true; for (int i = 1; i <= n; i++) { if (col[i] == -1) { cntA = 0; cntB = 0; dfs(i, 0); ans += max(cntA, cntB); } } for (int i = 1; i <= n; i++) { for (int j = 0; j < g[i].size(); j++) { if (col[i] == col[g[i][j]]) { flag = false; break; } } if (!flag) break; } if (flag) { printf("%d %d\n", ans, n - ans); } else { printf("Poor wyh\n"); } } return 0;}
0 0
- hdu 5285 dfs染色+贪心(bc #48 B)
- hdu 5313 (二分图染色+bitset或贪心) (bc周年庆第四题)
- HDU 5285 wyh2000 and pupil (DFS染色判二分图 + 贪心)
- hdu 4751(dfs染色)
- hdu 1241 dfs染色
- hdu 1312 dfs+染色
- CF 782C 贪心,DFS染色,水题
- hdu-1055----树染色问题color a tree(贪心)
- HDU 5802 Windows 10(贪心+DFS)
- HDU-5802-Windows 10(DFS+贪心)
- HDU 5802 Windows 10(贪心+dfs)
- HDU 5527 Too Rich (贪心+DFS)
- hdu 2444 二分图匹配 + dfs染色
- hdu 5313 Bipartite Graph 贪心+bfs染色
- HDU 3650 Hot Expo(气球染色 , 贪心 )
- hdu 5365 /BC 50B Run
- HDU 5059\BC 12B Help him
- HDU 5199/BC 36B Gunner
- Noip2005谁拿了最多的奖学金题解
- Java多线程面试常见核心问题总结
- ECharts实例开发学习笔记零
- 使用strace+pstack利器分析程序性能
- SSH环境mysql6.0报错Could not retrieve transation read-only status server
- hdu 5285 dfs染色+贪心(bc #48 B)
- php5.6编译安装关于mysql的报错
- Zigbee获取设备地址信息
- 如何清理sqlserver日志LDF文件
- HDU 1166 敌兵布阵(线段树或数状数组)
- 关于微信支付报错
- Linux real-time signal (实时信号)
- Palindrome Linked List
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十五讲:HTML教程笔记