Pagini recente » Cod sursa (job #2582629) | Cod sursa (job #313659) | Cod sursa (job #2379509) | Cod sursa (job #2218224) | Cod sursa (job #2943665)
from typing import List
def find(nod: int):
# aflam multimea in care se afla elementul "nod"
if parinte[nod] == nod:
return nod
parinte[nod] = find(parinte[nod])
return parinte[nod]
def union(x: int, y: int):
# unesc multimea cu rang mai mic de cea cu rang mai mare
if rang[x] > rang[y]:
parinte[y] = x
rang[x] += rang[y]
else:
parinte[x] = y
rang[y] += rang[x]
with open("disjoint.in") as f, open("disjoint.out", 'w') as g:
n, m = map(int, f.readline().split())
parinte: List[int] = [-1] * (n+1)
rang: List[int] = [-1] * (n+1)
for i in range(1, n+1):
parinte[i] = i
rang[i] = 1
while m:
tip, x, y = map(int, f.readline().split())
if tip == 1:
union(find(x), find(y))
else:
if find(x) == find(y):
g.write("DA\n")
else:
g.write("NU\n")
m -= 1