Cod sursa(job #302150)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 8 aprilie 2009 18:07:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<stdio.h>
FILE *f,*g;
long x,y,tata[100001],n,m,i,aux1,aux2,level1,level2,op;
void uneste(long x,long y)
{  level1=0; aux1=x; while(tata[aux1]!=0) { aux1=tata[aux1]; level1++; } level1++;
   level2=0; aux2=y; while(tata[aux2]!=0) { aux2=tata[aux2]; level2++; } level2++;
   if(level1>level2) tata[aux2]=aux1; else tata[aux1]=aux2;
}
void find(long x,long y)
{ aux1=x; while(tata[aux1]!=0) aux1=tata[aux1];
  aux2=y; while(tata[aux2]!=0) aux2=tata[aux2];
  if(aux1==aux2) fprintf(g,"DA\n"); else fprintf(g,"NU\n");
}
int main()
{ f=fopen("disjoint.in","r"); g=fopen("disjoint.out","w");
  fscanf(f,"%ld%ld",&n,&m);
  for(i=1;i<=m;i++)
   { fscanf(f,"%ld%ld%ld",&op,&x,&y);
     if(op==1) uneste(x,y); else find(x,y);
   }
  fclose(g);
  return 0;
}