题目
思考
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 6010;
const int M = N;
int p[N], sz[N];
struct edge{
int a;
int b;
int c;
bool operator < (const edge& v) const{
return c < v.c;
}
}e[M];
int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
int t, n;
int main()
{
cin >> t;
while(t--)
{
cin >> n;
for(int i = 1; i <= n; i++)
p[i] = i, sz[i] = 1;
for(int i = 1; i <= n-1; i++)
{
int a, b, c;
cin >> a >> b >> c;
e[i] = {a, b, c};
}
sort(e+1,e+n);
int res = 0;
for(int i = 1; i <= n-1; i++)
{
int a = e[i].a, b = e[i].b, c = e[i].c;
a = find(a), b = find(b);
if(a == b) continue;
res += (c+1) * (sz[a] * sz[b] - 1);
sz[b] += sz[a];
p[a] = b;
}
cout << res << '\n';
}
}