bestcoder#68 div 2 tree【集計】
27250 ワード
tree
Accepts: 152
Submissions: 697
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
問題の説明
説明の入力
出力の説明
入力サンプル
出力サンプル
Hint
终わらないうちに问题解を出すのはちょっとテンションが高いですね低調~1 A漂っています
コレクションを調べてもう一つのレコードコレクション要素の個数の配列を維持し、マージするたびに更新すればいいのです.
Accepts: 152
Submissions: 697
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 .
入力サンプル
1
3
1 2 0
2 3 1
出力サンプル
1
Hint
ans1=2
ans2=2
ans3=1
2 xor 2 xor 1=1, 1.
终わらないうちに问题解を出すのはちょっとテンションが高いですね低調~1 A漂っています
コレクションを調べてもう一つのレコードコレクション要素の個数の配列を維持し、マージするたびに更新すればいいのです.
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,t,a[100005],num[100005],cnt;
int fnd(int x)
{
if(x!=a[x]) a[x]=fnd(a[x]);
return a[x];
}
void addto(int x,int y)
{
x=fnd(x),y=fnd(y);
if(x==y) {
return ;
}
a[y]=a[x];
num[x]+=num[y];
return ;
}
int main()
{
// freopen("cin.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
cnt=0;
for(int i=1;i<=n;i++) {num[i]=1;a[i]=i;}
for(int i=1;i<n;i++)
{
int u,v,q;
scanf("%d%d%d",&u,&v,&q);
if(q==0) addto(u,v);
}
//cout<<"44544"<<endl;
cnt=0;
for(int i=1;i<=n;i++)
{
if(a[i]==i&&(num[i]&1)) cnt^=num[i];
}
printf("%d
",cnt);
}
return 0;
}