HDU 5606 tree
2016-01-15 16:25
337 查看
一道并查集,去掉权值为1的边,问联通块中点的个数
#include <cstdio> const int MAXN = 100005; int fa[MAXN], num[MAXN]; int find(int n) { if(fa != n) fa = find(fa ); return fa ; } int main() { int T; scanf("%d", &T); while(T--) { int n, a, b, v; scanf("%d", &n); for(int i = 1; i <= n; i++) fa[i] = i, num[i] = 1; for(int i = 1; i < n; i++) { scanf("%d%d%d", &a, &b, &v); if(v == 1) continue; int x = find(a), y = find(b); if(x != y) fa[x] = y, num[y] += num[x]; } int ans = 0; for(int i = 1; i <= n; i++) ans ^= num[find(i)]; printf("%d\n", ans); } return 0; }
相关文章推荐
- C语言中的常用变量
- 第五讲 二维费用的背包问题 HD FATE(二维完全背包)
- Apache 管理 Tomcat集群配置
- 设计模式:单一职责原则
- C++中关于拷贝构造函数
- nginx 多服务配置
- iOS 使用ContactsUI保存新联系人到系统通讯录
- Go与C语言的互操作 cgo
- Hibernate进阶
- 如何在linux系统之间共享文件
- grep命令详解
- POJ 2485 Highways
- Jquery的一些简单使用记录
- Codeforces Round #339 (Div. 2) A - Link/Cut Tree
- Xcode 快捷键大全
- OpenGl 坐标转换
- 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系
- UML类图几种关系的总结
- Windows下Core Audio APIS 音频应用开发(一)
- C语言之括号匹配