Search
ポテンシャル付きUnionFind
Last updated
Nov 30, 2022
Edit Source
# 説明
各頂点はポテンシャルを管理する。ポテンシャルの差がインターフェースとなる。重み付きUnionFindとも言う。
# 計算量
$O(\alpha(N))$
# 実装
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
| struct PotentialUnionFindTree {
vec<ll> par, diff;
PotentialUnionFindTree(ll n) {
par.resize(n);
diff.resize(n);
}
ll find(ll x) {
if (par[x] == x) return x;
ll r = find(par[x]);
diff[x] += diff[par[x]];
return par[x] = r;
}
ll weight(ll x) {
find(x);
return diff[x];
}
void unite(ll x, ll y, ll w) {
w += weight(x);
w += weight(y);
x = find(x);
y = find(y);
par[y] = x;
diff[y] = w;
}
};
|
# 使用例