Pagini recente » Cod sursa (job #3220027) | Cod sursa (job #827380) | Cod sursa (job #1641382) | Cod sursa (job #2604277) | Cod sursa (job #2345155)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int T[100001], rang[100001];
int n, m, op, n1, n2;
void unite(int a, int b)
{
if (rang[a] > rang[b]) T[b] = a;
else
{
T[a] = b;
if (rang[a] == rang[b]) rang[b] = rang[b] + 1;
}
}
int findm (int a)
{
if (a != T[a]) T[a] = findm(T[a]);
return T[a];
}
void reunite (int a, int b)
{
int A, B;
A = findm(a);
B = findm(b);
if (A != B && op == 2) fout << "NU\n";
else if (op == 2) fout << "DA\n";
if (op == 1) unite(A, B);
}
int main()
{
fin >> n >> m;
while(m--)
{
fin >> op >> n1 >> n2;
if (T[n1] == 0) T[n1] = n1;
if (T[n2] == 0) T[n2] = n2;
reunite(n1, n2);
}
return 0;
}