Cod sursa(job #2955121)

Utilizator FluffyDoggoCosmin Georgescu FluffyDoggo Data 16 decembrie 2022 12:27:56
Problema Paduri de multimi disjuncte Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.06 kb
class DisjointSet:
    def __init__(self, n: int):
        self.parent = [i for i in range(n)]
        self.rank = [1 for _ in range(n)]

    def find(self, a: int) -> int:
        if self.parent[a] == a:
            return a
        self.parent[a] = self.find(self.parent[a])
        return self.parent[a]
    
    def union(self, a: int, b: int):
        pa = self.find(a)
        pb = self.find(b)
        if pa == pb:
            return
        if self.rank[pa] > self.rank[pb]:
            self.parent[pb] = pa
            self.rank[pa] += self.rank[pb]
            self.rank[pb] = 0
        else:
            self.parent[pa] = pb
            self.rank[pb] += self.rank[pa]
            self.rank[pa] = 0

file = open("input.txt", 'r')
line = file.readline().split()
n, m = int(line[0]), int(line[1])
set = DisjointSet(n + 1)
for _ in range(m):
    line = file.readline().split()
    if int(line[0]) == 1:
        set.union(int(line[1]), int(line[2]))
    else:
        if set.find(int(line[1])) != set.find(int(line[2])):
            print("NU")
        else:
            print("DA")