![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ab438262b9e3385f4b081250d8a95015.png)
input:
7
2 1 1
3 2 0
4 2 1
5 2 0
6 7 1
7 2 1
output:
34
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6f5328f4b42b2f73691bb05821a909cd.png)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+5;
ll fa[2][maxn],size[2][maxn];
int find(int x,int id){
return fa[id][x] == x ? x : fa[id][x] = find(fa[id][x],id);
}
void merge(int x,int y,int id){
int Rx = find(x,id);
int Ry = find(y,id);
if(Rx != Ry){
fa[id][Rx] = Ry;
size[id][Ry] += size[id][Rx];
}
}
int main()
{
int n;
cin>>n;
for(int i =1;i<=n;i++){
fa[0][i] = fa[1][i] = i;
size[0][i] = size[1][i] = 1;
}
for(int i = 1;i < n;i++){
int x,y,id;
cin>>x>>y>>id;
merge(x,y,id);
}
ll ans = 0;
for(int i = 1;i <= n;i++){
ans += size[0][find(i,0)] * size[1][find(i,1)] - 1;
}
cout<<ans;
}