Pagini recente » Cod sursa (job #1612388) | Cod sursa (job #926237) | Cod sursa (job #445248) | Cod sursa (job #2714371) | Cod sursa (job #2944122)
from typing import List
def find(nod: int, parinte: List[int]) -> int:
# aflam multimea in care se afla elementul "nod"
if parinte[nod] == nod:
return nod
parinte[nod] = find(parinte[nod], parinte)
return parinte[nod]
def union(x: int, y: int, parinte: List[int], rang: List[int]) -> None:
# 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 = [i for i in range(n + 1)]
rang = [1] * (n + 1)
for i in range(n):
while m:
tip, x, y = map(int, f.readline().split())
if tip == 1:
union(find(x, parinte), find(y, parinte), parinte, rang)
else:
if find(x, parinte) == find(y, parinte):
g.write("DA\n")
else:
g.write("NU\n")
m -= 1