346. 走廊泼水节
vector<pair<int,pair<int,int>>>mp;
int f[MX],siz[MX];
int find(int x)
{
if(x==f[x]) return x;
return f[x]=find(f[x]);
}
void solve()
{
int n;cin>>n;
mp.clear();
rpp(i,n) f[i]=i,siz[i]=1;
rpp(i,n-1)
{
int x,y,w;cin>>x>>y>>w;
mp.push_back(make_pair(w,make_pair(x,y)));
}
sort(all(mp));
ll ans=0;
for(auto edge:mp)
{
int x = edge.second.first,y=edge.second.second,w = edge.first;
int fx=find(x),fy=find(y);
if(fx==fy) continue;
ans+=(w+1)*(siz[fx]*siz[fy]-1);
siz[fy]+=siz[fx],f[fx]=fy;
}
cout<<ans<<endl;
}