Cod sursa(job #434391)

Utilizator O_NealS. Alex O_Neal Data 5 aprilie 2010 20:04:23
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<fstream>
#include<cstdio>
using namespace std;

int t[100001];
int rang[100001];

void reuniune(int x,int y)
{
	if(rang[x]>rang[y])
		t[y]=x;
	else t[x]=y;
	if(rang[x]==rang[y]) rang[y]++;
}
	
int rad(int x)
{
	int r=x;
	while(t[r]) r=t[r];
	while(t[x])
	{
		int aux=t[x];
		t[x]=r;
		x=aux;
	}
	return r;
}

int main()
{
	int n,m,cod,x,y;
	ifstream fin("disjoint.in");
	freopen("disjoint.out","w",stdout);
	fin>>n>>m;
	//for(int i=1; i<=n; ++i)
	//	rang[i]=1;
	for(int i=1; i<=m; ++i)
	{
		fin>>cod>>x>>y;
		if(cod==1) reuniune(x,y);
		else if(rad(x)==rad(y)) printf("DA\n");
		else printf("NU\n");
	}
	return 0;
}