Cod sursa(job #601244)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 5 iulie 2011 16:44:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb

#include <cstdio>
#include <fstream>

using namespace std;

int p[131072],rg[131072];

int find (int x){
	
	if(x!=p[x])
		p[x]=find(p[x]);
	
	return p[x];}

void un (int x,int y){
	
	if(rg[x]>rg[y])
		p[y]=x;
	else
		p[x]=y;
	if(rg[x]==rg[y])
		++rg[y];
	
	}

int main ()
{
	
	int n,m,t,x,y;
	ifstream f ("disjoint.in");
	freopen ("disjoint.out","w",stdout);
	f>>n>>m;
	for(int i=1;i<=n;++i)
		p[i]=i;
	for(;m;--m){
		f>>t>>x>>y;
		if(t==1)
			un(find(x),find(y));
		else
			if(find(x)==find(y))
				printf("DA\n");
			else
				printf("NU\n");
		}
	
	return 0;}