1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const int MAXN = 2e5 + 5e2; int bin[MAXN], sum[MAXN]; int res = 0; inline int find(int x) { if (x != bin[x]) { int temp = bin[x]; bin[x] = find(bin[x]); sum[x] += sum[temp]; } return bin[x]; } inline void merge(int a, int b, int val) { int fa = find(a); int fb = find(b); if (fa != fb) { bin[fa] = fb; sum[fa] = - sum[a] + sum[b] + val; } }
|