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
AC × 1
AC × 85
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