Pagini recente » Cod sursa (job #1279233) | Cod sursa (job #1858262) | Cod sursa (job #720764) | Cod sursa (job #1102068) | Cod sursa (job #1607582)
#include <stdio.h>
#include <vector>
#define MAX 100005
using namespace std;
int n, m, t, x, y, id[MAX], size[MAX];
void MakeSet(int n){
for(int i = 1; i <= n; i++){
id[i] = i;
size[i] = 1;
}
}
int getRoot(int a){
while(id[a] != a){
id[a] = id[id[a]];
a = id[a];
}
}
void Union(int a, int b){
int roota = getRoot(a);
int rootb = getRoot(b);
if(size[roota] < size[rootb]){
size[rootb] += size[roota];
id[roota] = rootb;
}
else{
size[roota] += size[rootb];
id[rootb] = roota;
}
}
bool SameRoot(int a, int b){
return getRoot(a) == getRoot(b);
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d\n", &n, &m);
MakeSet(n);
for(int i = 0; i < m; i++){
scanf("%d%d%d", &t, &x, &y);
if(t == 1)
Union(x, y);
else
printf(SameRoot(x, y) ? "DA\n" : "NU\n");
}
return 0;
}