Pagini recente » Cod sursa (job #654891) | Cod sursa (job #1765090) | Clasament autumn06 | Cod sursa (job #1488097) | Cod sursa (job #372649)
Cod sursa(job #372649)
#include <stdio.h>
FILE*f=fopen("disjoint.in","r");
FILE*g=fopen("disjoint.out","w");
int tt[100020],n,m;
int rg[100020];
int find(int x){
int tatel;
tatel=x;
while(tt[tatel]!=tatel)
tatel=tt[tatel];
int y;
while(tt[x]!=tatel){
y=tt[x];
tt[x]=tatel;
x=y;
}
return tatel;
}
void unite(int x,int y){
if(rg[x] > rg[y])
tt[y]=x;
else tt[x]=y;
if(rg[x]==rg[y]) rg[y]++;
}
int main(){
fscanf(f,"%d %d",&n,&m);
int i,x,y,tip;
for(i=1;i<=n;i++){
tt[i]=i;
rg[i]=1;
}
for(i=1;i<=m;i++){
fscanf(f,"%d %d %d",&tip,&x,&y);
if(tip==2)
if(find(x) == find(y)) fprintf(g,"DA\n");
else fprintf(g,"NU\n");
else
unite(find(x),find(y));
}
fclose(f);
fclose(g);
return 0;
}