Pagini recente » Cod sursa (job #159690) | Cod sursa (job #1446187) | Cod sursa (job #1133639) | Cod sursa (job #1404838) | Cod sursa (job #1657773)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int> T, H;
int N, M;
void Read();
void Solve();
int Find(int x);
void Union(int x, int y);
int main()
{
Read();
Solve();
return 0;
}
void Solve()
{
int rx, ry, c, x, y;
while(M--)
{
scanf("%d%d%d", &c, &x, &y);
rx = Find(x);
ry = Find(y);
if(c == 1)
Union(rx, ry);
else
if( rx == ry )
cout<<"DA\n";
else
cout<<"NU\n";
}
}
int Find(int x)
{
int rx = x, z;
while(T[rx])
rx = T[rx];
while(x != rx) {
z = T[x];
T[x] = rx;
x = z;
}
return rx;
}
void Union(int rx, int ry)
{
if(H[rx] > H[ry])
T[ry] = rx;
else if(H[rx] < H[ry])
T[rx] = ry;
else {
H[rx]++;
T[rx] = ry;
}
}
void Read()
{
freopen("disjoint.in", "rt", stdin);
freopen("disjoint.out", "wt", stdout);
scanf("%d%d", &N, &M);
T.assign(N+2, 0);
H.assign(N+2, 0);
}