4个点WA了,4个点TE
/*
每张图里面跑一次并查集
然后整个图跑并查集,记录的是符合条件的(a,b)组对
每次输入a,b,k,只要去看下(a,b)符合不符合情况
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5009;
const ll D=209;
ll d,n,m,id[D][N],sz[N],ans;
ll find(ll d,ll x){
if(id[d][x]==x) return x;
return id[d][x]=find(d,id[d][x]);
}
void add(ll d,ll x,ll y){
ll a=find(d,x),b=find(d,y);
if(a==b) return;
id[d][a]=b;
if(!d)sz[b]+=sz[a];
}
int main(){
cin>>d>>n>>m,ans=n;
for(ll i=0;i<=d;++i)
for(ll j=1;j<=n;++j) id[i][j]=j;
for(ll j=1;j<=n;++j) sz[j]=1;
for(ll i=1;i<=m;++i){
ll x,y,k;
cin>>x>>y>>k;
if(find(0,x)==find(0,y)){cout<<ans<<"\n";continue;}
bool ok=1;
add(k,x,y);
for(ll j=1;j<=d;++j)
if(find(j,x)!=find(j,y)){ok=0;break;}
if(ok)
ans+=2*sz[find(0,x)]*sz[find(0,y)],add(0,x,y);
cout<<ans<<"\n";
}
return 0;
}