Pagini recente » Cod sursa (job #2499518) | Cod sursa (job #2945554) | Statistici david ursu (lockelamora) | Cod sursa (job #129069) | Cod sursa (job #1390943)
#include <stdio.h>
#include <stdlib.h>
int sef[100000];
inline int find(int i){
while(sef[i]!=i)
i=sef[i];
return i;
}
inline int min(int a, int b){
if(a<b)
return a;
return b;
}
inline int max(int a, int b){
if(a>b)
return a;
return b;
}
int main()
{
int n, m, j, x, y, a, b, i, c;
FILE *fi=fopen("disjoint.in","r"), *fo=fopen("disjoint.out", "w");
fscanf(fi, "%d%d", &n, &m);
for(i=1;i<=n;i++)
sef[i]=i;
for(j=0;j<m;j++){
fscanf(fi, "%d%d%d", &c, &x, &y);
if(c==1){
a=find(x);
b=find(y);
if(a!=b)
sef[min(a,b)]=max(a,b);
}
if(c==2){
if(find(x)==find(y))
fprintf(fo, "DA\n");
else
fprintf(fo, "NU\n");
}
}
fclose(fi);
fclose(fo);
return 0;
}