Pagini recente » Cod sursa (job #487942) | Cod sursa (job #692277) | Cod sursa (job #1265965) | Cod sursa (job #2858657) | Cod sursa (job #3170278)
#include <bits/stdc++.h>
#define NMAX 100005
#define INFILE "disjoint.in"
#define OUTFILE "disjoint.out"
using namespace std;
ifstream fin(INFILE);
ofstream fout(OUTFILE);
int t[NMAX];
int h[NMAX];
int findr(int x){
int r = x;
while(r != t[r]) r = t[r];
int y = x;
t[x] = r;
while(y != r){
int d = t[y];
t[y] = r;
y = d;
}
return r;
}
void unire(int x, int y){
int rx = findr(x);
int ry = findr(y);
if(h[rx] < h[ry]) t[x] = y;
else{
if(h[rx] > h[ry]) t[y] = x;
else{
t[rx] = ry;
h[ry]++;
}
}
}
int main()
{
int n,m,C,x,y;
fin >> n >> m;
for(int i = 1; i <= n; i++) t[i] = i;
for(int i = 1; i <= m; i++){
fin >> C >> x >> y;
if(C == 1) unire(x,y);
else{
if(findr(x) == findr(y)) fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}