1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <bits/stdc++.h> using namespace std;
const int N = 1e5 + 5; int n, fa[N], siz[N]; struct E { int u, v, w; bool operator < (const E& q) const { return w < q.w; } } e[N];
int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}
int main() { scanf("%d", &n); for (int i = 1; i < n; i++) scanf("%d %d %d", &e[i].u, &e[i].v, &e[i].w); for (int i = 1; i <= n; i++) fa[i] = i, siz[i] = 1; sort(e + 1, e + n); long long res = 0; for (int i = 1; i < n; i++) { int u = e[i].u, v = e[i].v, w = e[i].w; int uf = find(u), vf = find(v); res = res + 1ll * siz[uf] * siz[vf] * (w + 1); res -= 1; if (siz[uf] > siz[vf]) swap(uf, vf); fa[uf] = vf; siz[vf] += siz[uf]; } printf("%lld\n", res); return 0; }
|