Pagini recente » Cod sursa (job #1251247) | Cod sursa (job #658258) | Istoria paginii runda/iconcurs8/clasament | Cod sursa (job #2358732) | Cod sursa (job #1029203)
#include<stdio.h>
#define NMAX 100007
int n, m, Tip, a, b, Ta, Tb;
int t[NMAX], h[NMAX];
inline int father(int x){
if(x == t[x])
return x;
return father(t[x]);
}
void unite(int a, int b){
if(h[a] == h[b]){
t[b] = a;
++ h[a];
}
if(h[a] > h[b])
t[b] = a;
if(h[a] < h[b])
t[a] = b;
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++ i){
t[i] = i;
h[i] = 1;
}
for(int i = 1; i <= m; ++ i){
scanf("%d %d %d", &Tip, &a, &b);
Ta = father(a);
Tb = father(b);
if(Tip == 1)
if(Ta != Tb)
unite(Ta, Tb);
if(Tip == 2)
if(Ta != Tb)
printf("NU\n");
else
printf("DA\n");
}
return 0;
}