Cod sursa(job #1082325)

Utilizator anaid96Nasue Diana anaid96 Data 14 ianuarie 2014 14:53:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
// Include
#include <cstdio>

const int Nmax=(int)1e5+1;

using namespace std;

FILE *in, *out;


// Variabile
int n, m;
int tip,n1,n2;
int tata[Nmax];

int getRoot(int nod);

// Main
int main()
{	
	in=fopen("disjoint.in", "rt");
	out=fopen("disjoint.out", "wt");
	fscanf(in,"%d%d",&n,&m);
	for(int i=1; i<=m; ++i)
	{
		fscanf(in,"%d%d%d", &tip, &n1, &n2);
		if(tip==1)
		{
			int w=getRoot(n1);
			int q=getRoot(n2);
			if(w!=q)
				tata[q]=w;
			
		}
		else
		{
			if(getRoot(n1)==getRoot(n2))
				fprintf(out,"DA\n");
			else
				fprintf(out,"NU\n");
		}	
	}	
	fclose(in);
	fclose(out);
	return 0;
}

int getRoot(int nod)
{
	if(tata[nod])
	{
		tata[nod]=getRoot(tata[nod]);
		return tata[nod];
	}
	return nod;
}