This documentation is automatically generated by online-judge-tools/verification-helper
UnionFind の各辺に重みを付けたものです. 各頂点に重みD[i]があるのを想定して差分を管理したりします
class WeightedUnionFind:
def __init__(self, n):
self.n = n
self.par = [-1] * n
self.group_ = n
self.D = [0] * n
def find(self, x):
if self.par[x] < 0:
return x
lst = []
while self.par[x] >= 0:
lst.append(x)
x = self.par[x]
for y in lst[::-1]:
self.D[y] += self.D[self.par[y]]
self.par[y] = x
return x
def unite(self, x, y, d):
# D[x] - D[y] = d
xp = self.find(x)
yp = self.find(y)
d -= self.D[x]
d += self.D[y]
x = xp
y = yp
if x == y:
assert d == 0
return False
if self.par[x] > self.par[y]:
x, y = y, x
d *= -1
self.par[x] += self.par[y]
self.par[y] = x
self.group_ -= 1
self.D[y] = -d
return True
def size(self, x):
return -self.par[self.find(x)]
def same(self, x, y):
return self.find(x) == self.find(y)
@property
def group(self):
return self.group_
def diff(self, x, y):
if self.same(x, y):
return self.D[x] - self.D[y]
else:
return None
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.11.4/x64/lib/python3.11/site-packages/onlinejudge_verify/documentation/build.py", line 81, in _render_source_code_stat
bundled_code = language.bundle(
^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.11.4/x64/lib/python3.11/site-packages/onlinejudge_verify/languages/python.py", line 108, in bundle
raise NotImplementedError
NotImplementedError