Cod sursa(job #294757)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 2 aprilie 2009 19:02:39
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <fstream.h>
int t[10001],a[10001];
int N,M;
int c(int x)
{int r=x,y;
 while(t[r]!=r)
  r=t[r];
 while(t[x]!=x)
 {y=t[x];
  t[x]=r;
  x=y;}
 return r;
}
void u(int x,int y)
{if(a[x]>a[y])
  t[y]=x;
 else
  t[x]=y;
 if(a[x]==a[y]) ++a[y];
}
int main()
{ifstream f("disjoint.in");
ofstream g("disjoint.out");
int i,cod,x,y;
f>>N>>M;
for(i=1;i<=N;++i)
{t[i]=i;
 a[i]=1;
}
for(;M;--M)
{f>>cod>>x>>y;
 int rx=c(x),ry=c(y);
 if(cod==1)
  u(rx,ry);
 else
  if(rx==ry)
   g<<"DA\n";
  else
   g<<"NU\n";
}
return 0;
}