AtCoderの[https://atc001.contest.atcoder.jp/tasks/unionfind_a]の問題なのですが、以下のコードでほとんどの問題は通るのですが、一部だけREが出てしまいます。原因がわからないのですが、教えていただけないでしょうか?
union
1N,Q = map(int,input().split()) 2 3# 初期の木の根とランクを設定(初めはみんな根なのでpar[i]=i) 4par = [0]*N 5rank = [0]*N 6for n in range(N): 7 par[n] = n 8 9# 木の根を探索する関数 10# 根が自身でない場合は再帰的にたどる 11# x,yが同じ集合に属するかの判定はroot(par[x])==root(par[y])か否か 12def root(x): 13 if par[x] == x: 14 return x 15 else: 16 par[x] = root(par[x]) 17 return par[x] 18 19# 繋げる操作を指定された時に動かす関数 20def unite(x,y): 21 x = par[x] 22 y = par[y] 23 # rankが低い方に高い方を繋げる 24 if rank[x] > rank[y]: 25 par[x] = y 26 else: 27 par[y] = x 28 # 同じだった場合xのランクが一つ増える扱いになる 29 if rank[x] == rank[y]: 30 rank[x] += 1 31 32# 実際にクエリを受け取って動かす 33for q in range(Q): 34 p,a,b = map(int,input().split()) 35 if p == 1: 36 if root(par[a]) == root(par[b]): 37 print('Yes') 38 else: 39 print('No') 40 else: 41 unite(a,b)
なお、別言語でのUnion-Findについては以下のように例があります。(Pythonで同様に実装したつもりではいます)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。