Cod sursa(job #433543)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 3 aprilie 2010 20:12:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <stdio.h>
#define nmax 100004

FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");

int n,m;
int tata[nmax];

int p(int nod)
{
	 int r;
	 for(r=nod;tata[r]!=r;r=tata[r]);
	 while(nod!=tata[nod])
	 {
		  nod=tata[nod];
		  tata[nod]=r;
	 }
	 return r;
}

int main()
{
	 fscanf(f,"%d %d",&n,&m);
	 int i,x,y,ok;
	 for(i=1;i<=n;i++)
		 tata[i]=i;
	 for(i=1;i<=m;i++)
	 {
		  fscanf(f,"%d %d %d",&ok,&x,&y);
		  if(ok==1)
			  tata[p(x)]=p(y);
		  else if(p(x)==p(y))
			  fprintf(g,"DA\n");
		  else fprintf(g,"NU\n");
	 }
	 return 0;
}