hdu 5606
来源:互联网 发布:ise软件 编辑:程序博客网 时间:2024/06/06 06:49
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;const int maxn = 1e5+10;int f[maxn];int flag[maxn];int find(int x){ return x==f[x]?x:f[x] = find(f[x]);}void unit(int x,int y){ int bossx = find(x); int bossy = find(y); if(bossx!=bossy) { f[bossx]=bossy; }}int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); int x,y,z; for(int i= 1;i<=n;i++) f[i] = i; for(int i =1 ; i<n; i++) { scanf("%d%d%d",&x,&y,&z); if(z==0) { unit(x,y); } } memset(flag,0,sizeof(flag)); for(int i = 1; i<=n; i++) { f[i] = find(i); flag[f[i]]++; } int ans = 0; for(int i =1; i<=n; i++) { ans = flag[f[i]]^ans; } printf("%d\n",ans); } return 0 ;}
去掉边值为一的边,计算出每个点所在联通图里的点的总个数就是离他最近的点
tree
] Accepts: 143
Submissions: 807
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
有一个树(n个点, n−1条边的联通图),点标号从1~n,树的边权是0或1.求离每个点最近的点个数(包括自己).
输入描述
第一行一个数字T,表示T组数据.对于每组数据,第一行是一个n,表示点个数,接下来n−1,每行三个整数u,v,w,表示一条边连接的两个点和边权.T=50,1≤n≤100000,1≤u,v≤n,0≤w≤1.
输出描述
对于每组数据,输出答案.考虑到输出规模过大,设ansi表示第i个点的答案.你只需输出ans1 xor ans2 xor ans3.. xor ansn即可.
输入样例
131 2 02 3 1
输出样例
1
Hint
ans1=2ans2=2ans3=12 xor 2 xor 1=1, 因此输出1.
0 0
- hdu 5606
- HDU 5606 tree
- HDU 5606 tree
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- 未能加载文件或程序集“NPOI”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
- 大数据工程师为什么要学习scala
- 一起talk C栗子吧(第八十八回:C语言实例--使用管道进行进程间通信一)
- matlab中repmat函数的用法
- 【学习笔记】《STL使用入门教程》第一讲:STL的string类型的使用方法
- hdu 5606
- LeetCode-38-Count and Say(String/递归)-Easy
- QT编译出错解决方法
- Activity加载过程笔记(一)
- Content API与CEF3的关系
- AS基础命令篇一 - android
- 读《重构》1~3章
- 2015年度终结
- 【python】SIR模型实现