Pagini recente » Cod sursa (job #165855) | Cod sursa (job #165872) | Cod sursa (job #1769875) | Cod sursa (job #2387527) | Cod sursa (job #3175680)
#include <bits/stdc++.h>
#define NN 100005
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout("disjoint.out");
int n, m, t[NN], h[NN];
int op, x, y;
int rad(int x)
{
while(t[x] != x)
{
x = t[x];
}
return x;
}
void _union(int x, int y)
{
int rx = rad(x);
int ry = rad(y);
if(rx == ry)
return;
if(h[rx] > h[ry])
swap(rx, ry);
t[rx] = ry;
if(h[rx] == h[ry])
h[ry]++;
}
bool _find(int x, int y)
{
int rx = rad(x);
int ry = rad(y);
while (t[x] != x)
{
int p = t[x];
t[x] = rx;
x = p;
}
while (t[y] != y)
{
int p = t[y];
t[y] = ry;
y = p;
}
return rx == ry;
}
int main()
{
fin >> n >> m;
for(int i = 1 ; i <= n ; i++)
t[i] = i;
for(int i = 1 ; i <= m ; i++)
{
fin >> op >> x >> y;
if(op == 1)
_union(x, y);
else
{
if(_find(x, y))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}