Pagini recente » Cod sursa (job #2226628) | Cod sursa (job #1164744) | Cod sursa (job #1755946) | Cod sursa (job #2172283) | Cod sursa (job #2207357)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, cod, x, y, p[100002], m;
int find (int x) {
if (p[x] != x)
find(p[x]);
else
return x;
}
int Rank[100002];
void Union (int x, int y) {
int Xroot = find(x);
int Yroot = find(y);
if (Xroot != Yroot) {
if (Rank[Yroot] < Rank[Xroot])
p[Yroot] = Xroot;
else if (Rank[Xroot] < Rank[Yroot])
p[Xroot] = Yroot;
else {
p[Xroot] = Yroot;
Rank[Yroot]++;
}
}
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++) {
p[i] = i;
Rank[i] = 1;
}
for (int i = 1; i <= m; i++) {
fin >> cod >> x >> y;
if (cod == 1)
Union(x, y);
else {
int a1 = find(x);
int a2 = find(y);
if (a1 != a2)
fout << "NU\n";
else
fout << "DA\n";
}
}
return 0;
}