A66 - Connect Query
解答
code: python
class unionfind:
# n 頂点の Union-Find 木を作成
# (ここでは頂点番号が 1-indexed になるように実装しているが、0-indexed の場合は par, size のサイズは n でよい)
def __init__(self, n):
self.n = n
self.par = -1 * (n + 1) # 最初は親が無い self.size = 1 * (n + 1) # 最初はグループの頂点数が 1 # 頂点 x の根を返す関数
def root(self, x):
# 1 個先(親)がなくなる(つまり根に到達する)まで、1 個先(親)に進み続ける
return x
# 要素 u, v を統合する関数
def unite(self, u, v):
rootu = self.root(u)
rootv = self.root(v)
if rootu != rootv:
# u と v が異なるグループのときのみ処理を行う
else:
# 要素 u と v が同一のグループかどうかを返す関数
def same(self, u, v):
return self.root(u) == self.root(v)
N, Q = map(int, input().split())
uf = unionfind(N)
for tp, u, v in queries:
if tp == 1:
uf.unite(u, v)
if tp == 2:
if uf.same(u, v):
print("Yes")
else:
print("No")