Cod sursa(job #609247)

Utilizator balakraz94abcd efgh balakraz94 Data 20 august 2011 13:37:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<cstdio>
#define infile "disjoint.in"
#define outfile "disjoint.out"
#define n_max 100005
using namespace std;


int n,m;
int T[n_max],R[n_max];


void init();


void init()
{
	for(int i=1;i<=n;i++)
		T[i]=i, R[i]=1;
}


int cauta(int x)
{
	int r,y;
	
	for(r=x; T[r]!=r; r=T[r]);
	
	while(T[x]!=x)
	{
		y=T[x];
		T[x]=r;
		x=y;
	}
	
	return r;	
}

void uneste(int x, int y)
{
	//if(R[x] < R[y])
		T[x]=y;
	//else
	//	T[y]=x;
	
	//if(R[x] == R[y])
	//	R[x]++;
}


int main()
{

	freopen(infile,"r",stdin);
	freopen(outfile,"w",stdout);
	
	scanf("%d %d",&n,&m);
	
	init();
	
	int q,x,y;
	
	while(m--)
	{
		scanf("%d %d %d",&q,&x,&y);
		
		if(q==1)
			uneste(cauta(x),cauta(y));
		else
		{
			if(cauta(x) == cauta(y))
				printf("DA\n");
			else 
				printf("NU\n");
		}
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}