Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>using namespace std;const int MAX_N = 100010;int parents[MAX_N];int weights[MAX_N];int query(int x){int px = parents[x];if (px != x){parents[x] = query(px);weights[x] += weights[px];}return parents[x];}void join(int a, int b, int w){// 合并两个集合int ga = query(a);int gb = query(b);if (ga == gb)return ;parents[ga] = gb;weights[ga] = w + weights[b] - weights[a];}