We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 5395751 commit 527432cCopy full SHA for 527432c
1 file changed
library/dsu/dsu_weighted.hpp
@@ -1,27 +1,21 @@
1
#pragma once
2
struct dsu_weighted {
3
- int n;
4
vi p;
5
vector<ll> d;
6
- dsu_weighted(int n): n(n), p(n, -1), d(n) {}
+ dsu_weighted(int n): p(n, -1), d(n) {}
7
int f(int u) {
8
if (p[u] < 0) return u;
9
int root = f(p[u]);
10
- d[u] += d[p[u]];
11
- return p[u] = root;
+ return d[u] += d[p[u]], p[u] = root;
12
}
13
int size(int u) { return -p[f(u)]; }
14
ll diff(int u, int v) {
15
return f(u) == f(v) ? d[v] - d[u] : 1e18;
16
17
bool join(int u, int v, ll w) {
18
w += d[u] - d[v];
19
- u = f(u), v = f(v);
20
- if (u == v) return 0;
+ if ((u = f(u)) == (v = f(v))) return 0;
21
if (p[u] > p[v]) swap(u, v), w = -w;
22
- p[u] += p[v];
23
- p[v] = u;
24
- d[v] = w;
25
- return 1;
+ return p[u] += p[v], p[v] = u, d[v] = w, 1;
26
27
};
0 commit comments