Submission #22129492


Source Code Expand

from collections import defaultdict
from collections import Counter

class UnionFind():
    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n

    def find(self, 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 = 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]
        self.parents[y] = x

    def size(self, x):
        return -self.parents[self.find(x)]

    def same(self, x, y):
        return self.find(x) == self.find(y)

    def members(self, 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):
        group_members = defaultdict(list)
        for member in range(self.n):
            group_members[self.find(member)].append(member)
        return group_members

    def __str__(self):
        return '\n'.join(f'{r}: {m}' for r, m in self.all_group_members().items())


N,Q = map(int, input().split())
C = list(map(int, input().split())) 
CC = []
for i in range(N):
    CC.append(Counter([C[i]]))

uf = UnionFind(N)
for i in range(Q):
    q,a,b = map(int, input().split())
    if q==1:
        if not uf.same(a-1,b-1):
            a = uf.find(a-1)
            b = uf.find(b-1)
            if uf.parents[a] > uf.parents[b]:
                a, b = b, a
            CC[a]+=CC[b]
            uf.union(a,b)
    
    else:
        print(CC[uf.find(a-1)][b])

Submission Info

Submission Time
Task F - Confluence
User H20
Language PyPy3 (7.3.0)
Score 0
Code Size 1880 Byte
Status TLE
Exec Time 3314 ms
Memory 206912 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 3
AC × 18
TLE × 3
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All path_01.txt, path_02.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_11.txt, random_12.txt, random_13.txt, random_21.txt, random_22.txt, random_23.txt, sample_01.txt, sample_02.txt, sample_03.txt, special_01.txt, special_02.txt
Case Name Status Exec Time Memory
path_01.txt TLE 3314 ms 158008 KiB
path_02.txt AC 561 ms 155884 KiB
random_01.txt AC 456 ms 72968 KiB
random_02.txt AC 610 ms 71348 KiB
random_03.txt AC 523 ms 71548 KiB
random_04.txt AC 602 ms 71564 KiB
random_05.txt TLE 3314 ms 174012 KiB
random_06.txt AC 1063 ms 162096 KiB
random_07.txt AC 1327 ms 173792 KiB
random_08.txt AC 1069 ms 162504 KiB
random_11.txt AC 1077 ms 171688 KiB
random_12.txt AC 1066 ms 168636 KiB
random_13.txt AC 1082 ms 169580 KiB
random_21.txt AC 1108 ms 172276 KiB
random_22.txt TLE 3314 ms 173500 KiB
random_23.txt AC 1261 ms 172836 KiB
sample_01.txt AC 70 ms 65036 KiB
sample_02.txt AC 60 ms 65020 KiB
sample_03.txt AC 60 ms 64996 KiB
special_01.txt AC 667 ms 206912 KiB
special_02.txt AC 483 ms 129632 KiB