Submission #68761665
Source Code Expand
from collections import defaultdict
class UnionFind():
def __init__(self,n):
self.n=n
self.parents=[-1]*n
def find(self,x): #要素xが属するグループの根を返す
#根ならその番号を返す
if self.parents[x]<0:
return x
# 根でないなら、親の要素で再検索
else:
# 走査していく過程で親を書き換える
self.parents[x]=self.find(self.parents[x])
return self.parents[x]
def union(self,x,y): #要素xが属するグループと要素yが属するグループとを併合する
#根を探す
x=self.find(x)
y=self.find(y)
if x==y:
return
if self.parents[x]>self.parents[y]: #グループの大きい方に合わせる
x,y=y,x
self.parents[x]+=self.parents[y] #x(根)の要素にy(根)のグループの要素数をプラスする(要素の値は負の数で表される)
self.parents[y]=x
def size(self,x): #要素xが属するグループのサイズ(要素数)を返す
return -self.parents[self.find(x)]
def same(self,x,y): #要素x, yが同じグループに属するかどうかを返す
return self.find(x)==self.find(y)
def members(self,x): #要素xが属するグループに属する要素をリストで返す
root=self.find(x)
return [i for i in range(self.n) if self.find(i)==root]
def roots(self): #すべての根の要素をリストで返す
return [i for i ,x in enumerate(self.parents) if x<0]
def group_count(self): #グループの数を返す
return len(self.roots())
def all_group_members(self): #{ルート要素: [そのグループに含まれる要素のリスト], ...}のdefaultdictを返す
group_members = defaultdict(list)
for member in range(self.n):
group_members[self.find(member)].append(member)
return group_members
def __str__(self): #ルート要素: [そのグループに含まれる要素のリスト]を文字列で返す (print()での表示用)
return '\n'.join('{}:{}'.format(r,self.members(r)) for r in self.roots())
################################################################################
import bisect, heapq, sys, math, copy, itertools, decimal
from collections import defaultdict, deque
sys.setrecursionlimit(10**7)
def INT(): return int(input())
def MI(d=0): return map(lambda x:int(x)+d, input().split())
def MS(): return map(str, input().split())
def LI(d=0): return list(map(lambda x:int(x)+d, input().split()))
def LS(): return list(map(str, input().split()))
def pr_line(itr): print(*itr, sep='\n')
def pr_mtx(matrix): [print(*row) for row in matrix]
dij = [[1, 0], [0, 1], [-1, 0], [0, -1]]
dij2 = [[1, 0], [0, 1], [-1, 0], [0, -1], [1, 1], [1, -1], [-1, 1], [-1, -1]]
INF = float('inf')
N, Q = MI()
uf = UnionFind(N)
cnt_black = [0]*N
B_or_W = [0]*N
ans = []
for _ in range(Q):
query = LI(-1)
if query[0] == 0:
u, v = query[1:]
if not uf.same(u, v):
cnt_u = cnt_black[uf.find(u)]
cnt_v = cnt_black[uf.find(v)]
uf.union(u, v)
p = uf.find(u)
cnt_black[p] = cnt_u + cnt_v
if query[0] == 1:
v = query[1]
if B_or_W[v] == 0:
B_or_W[v] = 1
cnt_black[uf.find(v)] += 1
else:
B_or_W[v] = 0
cnt_black[uf.find(v)] -= 1
if query[0] == 2:
v = query[1]
if cnt_black[uf.find(v)] == 0:
ans.append('No')
else:
ans.append('Yes')
pr_line(ans)
Submission Info
| Submission Time | |
|---|---|
| Task | E - Reachability Query |
| User | BenKenobi |
| Language | Python (PyPy 3.10-v7.3.12) |
| Score | 450 |
| Code Size | 3792 Byte |
| Status | AC |
| Exec Time | 763 ms |
| Memory | 147572 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 450 / 450 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt |
| All | sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt, test_72.txt, test_73.txt, test_74.txt, test_75.txt, test_76.txt, test_77.txt, test_78.txt, test_79.txt, test_80.txt, test_81.txt, test_82.txt, test_83.txt, test_84.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| sample_01.txt | AC | 154 ms | 88308 KiB |
| test_01.txt | AC | 154 ms | 88004 KiB |
| test_02.txt | AC | 155 ms | 88416 KiB |
| test_03.txt | AC | 385 ms | 142440 KiB |
| test_04.txt | AC | 389 ms | 142316 KiB |
| test_05.txt | AC | 363 ms | 90292 KiB |
| test_06.txt | AC | 422 ms | 126152 KiB |
| test_07.txt | AC | 410 ms | 107712 KiB |
| test_08.txt | AC | 422 ms | 103636 KiB |
| test_09.txt | AC | 390 ms | 90112 KiB |
| test_10.txt | AC | 411 ms | 109868 KiB |
| test_11.txt | AC | 423 ms | 104476 KiB |
| test_12.txt | AC | 405 ms | 106396 KiB |
| test_13.txt | AC | 389 ms | 95260 KiB |
| test_14.txt | AC | 420 ms | 102412 KiB |
| test_15.txt | AC | 433 ms | 105652 KiB |
| test_16.txt | AC | 455 ms | 94036 KiB |
| test_17.txt | AC | 470 ms | 92488 KiB |
| test_18.txt | AC | 447 ms | 123072 KiB |
| test_19.txt | AC | 425 ms | 112324 KiB |
| test_20.txt | AC | 435 ms | 106684 KiB |
| test_21.txt | AC | 468 ms | 98016 KiB |
| test_22.txt | AC | 484 ms | 105460 KiB |
| test_23.txt | AC | 504 ms | 127960 KiB |
| test_24.txt | AC | 515 ms | 134324 KiB |
| test_25.txt | AC | 482 ms | 122792 KiB |
| test_26.txt | AC | 483 ms | 119348 KiB |
| test_27.txt | AC | 494 ms | 123812 KiB |
| test_28.txt | AC | 444 ms | 102160 KiB |
| test_29.txt | AC | 673 ms | 127604 KiB |
| test_30.txt | AC | 678 ms | 127792 KiB |
| test_31.txt | AC | 661 ms | 127508 KiB |
| test_32.txt | AC | 763 ms | 132864 KiB |
| test_33.txt | AC | 757 ms | 122972 KiB |
| test_34.txt | AC | 752 ms | 115564 KiB |
| test_35.txt | AC | 711 ms | 132580 KiB |
| test_36.txt | AC | 684 ms | 112780 KiB |
| test_37.txt | AC | 476 ms | 120568 KiB |
| test_38.txt | AC | 469 ms | 97076 KiB |
| test_39.txt | AC | 471 ms | 117172 KiB |
| test_40.txt | AC | 499 ms | 100688 KiB |
| test_41.txt | AC | 504 ms | 107572 KiB |
| test_42.txt | AC | 490 ms | 111800 KiB |
| test_43.txt | AC | 495 ms | 120120 KiB |
| test_44.txt | AC | 484 ms | 115840 KiB |
| test_45.txt | AC | 636 ms | 120084 KiB |
| test_46.txt | AC | 614 ms | 110308 KiB |
| test_47.txt | AC | 606 ms | 101680 KiB |
| test_48.txt | AC | 746 ms | 117480 KiB |
| test_49.txt | AC | 667 ms | 109280 KiB |
| test_50.txt | AC | 661 ms | 113108 KiB |
| test_51.txt | AC | 622 ms | 99112 KiB |
| test_52.txt | AC | 673 ms | 131040 KiB |
| test_53.txt | AC | 506 ms | 117260 KiB |
| test_54.txt | AC | 491 ms | 110580 KiB |
| test_55.txt | AC | 492 ms | 130100 KiB |
| test_56.txt | AC | 509 ms | 121840 KiB |
| test_57.txt | AC | 509 ms | 103596 KiB |
| test_58.txt | AC | 477 ms | 100524 KiB |
| test_59.txt | AC | 526 ms | 136156 KiB |
| test_60.txt | AC | 492 ms | 118516 KiB |
| test_61.txt | AC | 432 ms | 110620 KiB |
| test_62.txt | AC | 457 ms | 139164 KiB |
| test_63.txt | AC | 443 ms | 120320 KiB |
| test_64.txt | AC | 444 ms | 126236 KiB |
| test_65.txt | AC | 435 ms | 120052 KiB |
| test_66.txt | AC | 449 ms | 141016 KiB |
| test_67.txt | AC | 452 ms | 147572 KiB |
| test_68.txt | AC | 454 ms | 141176 KiB |
| test_69.txt | AC | 517 ms | 96888 KiB |
| test_70.txt | AC | 556 ms | 99536 KiB |
| test_71.txt | AC | 526 ms | 115108 KiB |
| test_72.txt | AC | 725 ms | 99884 KiB |
| test_73.txt | AC | 638 ms | 104432 KiB |
| test_74.txt | AC | 635 ms | 97976 KiB |
| test_75.txt | AC | 596 ms | 101956 KiB |
| test_76.txt | AC | 460 ms | 145420 KiB |
| test_77.txt | AC | 620 ms | 99364 KiB |
| test_78.txt | AC | 614 ms | 99184 KiB |
| test_79.txt | AC | 648 ms | 122996 KiB |
| test_80.txt | AC | 717 ms | 102440 KiB |
| test_81.txt | AC | 723 ms | 104080 KiB |
| test_82.txt | AC | 693 ms | 117792 KiB |
| test_83.txt | AC | 638 ms | 98180 KiB |
| test_84.txt | AC | 666 ms | 124920 KiB |