Cod sursa(job #2946498)

Utilizator alex.rus123Rus Alexandru alex.rus123 Data 24 noiembrie 2022 22:09:52
Problema Paduri de multimi disjuncte Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 0.93 kb
def find(p):
    if (parent[p] == -1):
        return p
    parent[p] = find(parent[p])
    return parent[p]

f = open("disjoint.in", 'r')
n, m = (int(x) for x in f.readline().split(" "))

parent = [-1 for i in range(n + 1)]
rank = [0 for i in range(n+1)]

for linie in f:
    z = int(linie[0])
    x = int(linie[2])
    y = int(linie[4])
    absx = 0
    absy = 0
    if z == 1: #union
        absx = find(x)
        absy = find(y)
        if rank[absx] == rank[absy]:
            parent[absx] = absy
            rank[absy] = rank[absy] + 1
        else:
            if rank[absx] < rank[absy]:
                parent[absx] = absy
                rank[absy] = rank[absy] + 1
            else:
                parent[absy] = absx
                rank[absx] = rank[absx] + 1
    else: #verificare daca sunt in aceeasi multime
        if(find(x) == find(y)):
            print("DA")
        else:
            print("NU")