比赛 2025.6.2 评测结果 AAAAAAAAAA
题目名称 0-1-Tree 最终得分 100
用户昵称 李奇文 运行时间 0.415 s
代码语言 C++ 内存使用 5.55 MiB
提交时间 2025-06-02 12:13:54
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n;
int a[N],b[N],w1[N],w2[N],fa[N],fb[N];
int finda(int x){
	return fa[x]==x?x:fa[x]=finda(fa[x]);
}
int findb(int x){
	return fb[x]==x?x:fb[x]=findb(fb[x]);
}
int main(){
	freopen("0-1-Tree.in","r",stdin);
	freopen("0-1-Tree.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		fa[i]=fb[i]=i;
		w1[i]=w2[i]=1;
	}
	for(int i=1;i<n;i++){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		if(z==1){
			int a=finda(x),b=finda(y);
			fa[a]=b;
			w1[b]+=w1[a];
		}
		if(z==0){
			int a=findb(x),b=findb(y);
			fb[a]=b;
			w2[b]+=w2[a];
		}
	}
	long long ans=0;
	for(int i=1;i<=n;i++){
		int a=finda(i),b=findb(i);
		ans=ans+1ll*w1[a]*w2[b]-1;
	}
	printf("%lld\n",ans);
	return 0;
}