Submission #39419716


Source Code Expand

from collections import defaultdict


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())


class UnionFindLabel(UnionFind):
    def __init__(self, labels):
        assert len(labels) == len(set(labels))
        
        self.n = len(labels)
        self.parents = [-1] * self.n
        self.d = {x: i for i, x in enumerate(labels)}
        self.d_inv = {i: x for i, x in enumerate(labels)}
    
    def find_label(self, x):
        return self.d_inv[super().find(self.d[x])]
    
    def union(self, x, y):
        super().union(self.d[x], self.d[y])
    
    def size(self, x):
        return super().size(self.d[x])
    
    def same(self, x, y):
        return super().same(self.d[x], self.d[y])
    
    def members(self, x):
        root = self.find(self.d[x])
        return [self.d_inv[i] for i in range(self.n) if self.find(i) == root]
    
    def roots(self):
        return [self.d_inv[i] for i, x in enumerate(self.parents) if x < 0]
    
    def all_group_members(self):
        group_members = defaultdict(list)
        for member in range(self.n):
            group_members[self.d_inv[self.find(member)]].append(self.d_inv[member])
        return group_members
    

N, M = map(int, input().split())

uf = UnionFind(N+1)
ans = [0]*(N+1)
for _ in range(M):
    u, v = map(int, input().split())
    uf.union(u, v)
    ans[uf.find(u)]+=1

for d in uf.all_group_members().items():
    i, l = d[0], d[1]
    if i == 0:
        continue
    if ans[i] == len(l):
        pass
    else:
        print("No")
        exit()
print("Yes")

Submission Info

Submission Time
Task D - Unicyclic Components
User KumaNeko08
Language Python (3.8.2)
Score 400
Code Size 2918 Byte
Status AC
Exec Time 758 ms
Memory 49712 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 3
AC × 61
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 02_one_00.txt, 02_one_01.txt, 02_one_02.txt, 02_one_03.txt, 02_one_04.txt, 02_one_05.txt, 02_one_06.txt, 02_one_07.txt, 02_one_08.txt, 02_one_09.txt, 02_one_10.txt, 02_one_11.txt, 02_one_12.txt, 02_one_13.txt, 03_two_00.txt, 03_two_01.txt, 03_two_02.txt, 03_two_03.txt, 03_two_04.txt, 03_two_05.txt, 03_two_06.txt, 03_two_07.txt, 03_two_08.txt, 03_two_09.txt, 03_two_10.txt, 03_two_11.txt, 04_many_00.txt, 04_many_01.txt, 04_many_02.txt, 04_many_03.txt, 04_many_04.txt, 04_many_05.txt, 04_many_06.txt, 04_many_07.txt, 04_many_08.txt, 04_many_09.txt, 04_many_10.txt, 04_many_11.txt, 05_hand_00.txt, 05_hand_01.txt, 99_hack_00.txt, 99_hack_01.txt, 99_hack_02.txt, 99_hack_03.txt, 99_hack_04.txt, 99_hack_05.txt, 99_hack_06.txt, 99_hack_07.txt, 99_hack_08.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 19 ms 9144 KiB
00_sample_01.txt AC 23 ms 9316 KiB
00_sample_02.txt AC 26 ms 9244 KiB
01_rnd_00.txt AC 21 ms 9284 KiB
01_rnd_01.txt AC 19 ms 9248 KiB
01_rnd_02.txt AC 458 ms 9168 KiB
01_rnd_03.txt AC 21 ms 9344 KiB
01_rnd_04.txt AC 21 ms 9460 KiB
01_rnd_05.txt AC 590 ms 9292 KiB
01_rnd_06.txt AC 146 ms 49704 KiB
01_rnd_07.txt AC 147 ms 49712 KiB
01_rnd_08.txt AC 758 ms 24528 KiB
02_one_00.txt AC 22 ms 9148 KiB
02_one_01.txt AC 19 ms 9380 KiB
02_one_02.txt AC 19 ms 9148 KiB
02_one_03.txt AC 20 ms 9248 KiB
02_one_04.txt AC 26 ms 9236 KiB
02_one_05.txt AC 24 ms 9144 KiB
02_one_06.txt AC 20 ms 9312 KiB
02_one_07.txt AC 665 ms 29112 KiB
02_one_08.txt AC 672 ms 28936 KiB
02_one_09.txt AC 675 ms 29292 KiB
02_one_10.txt AC 670 ms 29208 KiB
02_one_11.txt AC 675 ms 29000 KiB
02_one_12.txt AC 672 ms 29032 KiB
02_one_13.txt AC 672 ms 29224 KiB
03_two_00.txt AC 687 ms 29008 KiB
03_two_01.txt AC 688 ms 29204 KiB
03_two_02.txt AC 682 ms 29212 KiB
03_two_03.txt AC 673 ms 29116 KiB
03_two_04.txt AC 671 ms 29228 KiB
03_two_05.txt AC 669 ms 28904 KiB
03_two_06.txt AC 664 ms 29100 KiB
03_two_07.txt AC 672 ms 29148 KiB
03_two_08.txt AC 668 ms 29180 KiB
03_two_09.txt AC 674 ms 29104 KiB
03_two_10.txt AC 667 ms 29224 KiB
03_two_11.txt AC 674 ms 28844 KiB
04_many_00.txt AC 440 ms 35816 KiB
04_many_01.txt AC 443 ms 35628 KiB
04_many_02.txt AC 445 ms 35732 KiB
04_many_03.txt AC 441 ms 35840 KiB
04_many_04.txt AC 667 ms 29164 KiB
04_many_05.txt AC 667 ms 28868 KiB
04_many_06.txt AC 670 ms 29120 KiB
04_many_07.txt AC 675 ms 29020 KiB
04_many_08.txt AC 627 ms 27788 KiB
04_many_09.txt AC 629 ms 27924 KiB
04_many_10.txt AC 628 ms 27796 KiB
04_many_11.txt AC 636 ms 27924 KiB
05_hand_00.txt AC 22 ms 9156 KiB
05_hand_01.txt AC 699 ms 20436 KiB
99_hack_00.txt AC 26 ms 9312 KiB
99_hack_01.txt AC 19 ms 9248 KiB
99_hack_02.txt AC 23 ms 9408 KiB
99_hack_03.txt AC 24 ms 9240 KiB
99_hack_04.txt AC 21 ms 9380 KiB
99_hack_05.txt AC 20 ms 9384 KiB
99_hack_06.txt AC 20 ms 9284 KiB
99_hack_07.txt AC 20 ms 9248 KiB
99_hack_08.txt AC 20 ms 9344 KiB