Cod sursa(job #369642)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 29 noiembrie 2009 00:42:00
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.62 kb
#include<stdio.h>
#define infile "disjoint.in"
#define outfile "disjoint.out"
#define nmax (100*1001)
int t[nmax]; //tatal nodului
int n; //numarul de noduri
int m; //numarul de operatii

int find(int i)
{
	int j,k=i;
	while(t[i]) i=t[i];
	while(t[k]) j=t[k],t[k]=i,k=j;
	return i;
}

void unit(int i, int j)
{
	t[find(i)]=find(j);
}

int main()
{
	int i,j,k;
	freopen(infile,"r",stdin);
	freopen(outfile,"w",stdout);
	
	scanf("%d %d\n",&n,&m);
	while(m--)
	{
		scanf("%d %d %d\n",&i,&j,&k);
		if(i==1) unit(j,k); //unim
		else if(find(j)==find(k)) printf("DA\n");
		else printf("NU\n");
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}