Pagini recente » Cod sursa (job #2187069) | Cod sursa (job #1900651) | Cod sursa (job #2843749) | Monitorul de evaluare | Cod sursa (job #1390940)
#include <stdio.h>
#include <stdlib.h>
int sef[100000];
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;
}