UVa 11690
来源:互联网 发布:知乎 平面设计提高 编辑:程序博客网 时间:2024/06/03 03:44
题目:一些人去旅游,结束后他们有些人之间的关系变得恶劣了,而他们付的钱并没有完全的均分;
现在问保持友好关系的人之间的钱能否完全均化掉。
分析:并查集,数据结构。将还保持友好关系的人构建并查集,判断每个集合的人们是否债务和为零。
说明:还是要学英语,其他都是浮云。
#include <stdio.h>#include <stdlib.h>#include <string.h>//union_set__begein#define MAX_UNION_ITEM_SIZE 10001int union_sets[10001];int union_rank[10001];int union_sums[10001];void union_initial(int s, int t) {for (int i = s ; i <= t; ++ i) {union_sets[i] = i;union_rank[i] = 0;union_sums[i] = 1;}}int union_union(int a, int b) {if (union_rank[a] > union_rank[b]) {union_sets[b] = a;union_sums[a] += union_sums[b];return union_sums[a];}else {union_sets[a] = b;if (union_rank[a] == union_rank[b])union_rank[b] ++;union_sums[b] += union_sums[a];return union_sums[b];}}int union_find(int a) {if (a != union_sets[a])union_sets[a] = union_find(union_sets[a]);return union_sets[a];}//union_set__endint main(){int N, n, m, x, y;while (~scanf("%d", &N)) while (N --) {scanf("%d%d", &n, &m);union_initial(0, n-1);for (int i = 0; i < n; ++ i) {scanf("%d", &union_sums[i]);}for (int i = 0; i < m; ++ i) {scanf("%d%d", &x, &y);int A = union_find(x);int B = union_find(y);if (A != B) {union_union(A, B);}}int flag = 0;for (int i = 0; i < n; ++ i) {int s = union_find(i);if (union_sums[s]) {flag = 1;break;}}if (flag) {puts("IMPOSSIBLE");}else {puts("POSSIBLE");}}return 0;}
阅读全文
0 0
- UVa 11690
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 考研经验贴——看了都上了
- 在CentOS环境下mysql如何远程连接
- 用StringBuffer写数据查重代码
- matplotlib.pyplot中文标题乱码
- Qt中QLabel显示动态图的平滑缩放
- UVa 11690
- 程序员怎么升职加薪?十年技术高管的过来人经验!
- js中的函数一
- 如何成为一名成功的程序员
- 身为程序员的你是不是经常说这几句话呢?
- Android中View的绘制流程
- static的作用解析
- 优秀程序员的炼成记!
- swagger前后端使用说明