Cod sursa(job #2948549)

Utilizator rstrIoana Stratan rstr Data 27 noiembrie 2022 20:39:44
Problema Paduri de multimi disjuncte Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.27 kb
with open('disjoint.in','r') as f:
    line = f.readline()
    line = [int(x) for x in line.split()]
    n = line[0]
    m = line[1]
    #initializare
    tata = [0 for i in range(n+1)]
    h = [0 for i in range(n+1)]

    def reprez(u):
        global tata
        # while tata[u]!=0:
        #     u = tata[u]
        # return u
        if tata[u] == 0:
            return u
        tata[u] = reprez(tata[u])
        return tata[u]

    def reuneste(u,v):
        ru = reprez(u)
        rv = reprez(v)
        if h[ru]>h[rv]:
            tata[rv] = ru
        else:
            tata[ru] = rv
            if h[ru] == h[rv]:
                h[rv] = h[rv] + 1
    result = ''
    for i in range(m):
        line = f.readline()
        line = [int(x) for x in line.split()]
        if line[0] == 2:
            if reprez(line[1]) == reprez(line[2]):
                #print("DA")
                result += " " + " DA"
            else:
                #print("NU")
                result += " " + "NU"
        else:
            if reprez(line[1]) != reprez(line[2]):
                reuneste(reprez(line[1]),reprez(line[2]))

with open('disjoint.out','w') as g:
    cuv = [x for x in result.split()]
    #print(cuv)
    for c in cuv:
        g.write(c+'\n')