Cod sursa(job #1338724)

Utilizator anaid96Nasue Diana anaid96 Data 10 februarie 2015 12:19:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>

FILE *in, *out;

//definitions

//constants
const int sz = (int) 1e5+1;

//variables
int nodes, numberOperations;
int operation, node1, node2;

int tata[sz];

//functions
int getRoot(int node);

int main(void)
{
	in = fopen("disjoint.in", "rt");
	out = fopen("disjoint.out", "wt");
	
	fscanf(in, "%d%d", &nodes, &numberOperations);
	
	while(numberOperations--)
	{
		fscanf(in, "%d%d%d", &operation, &node1, &node2);
		
		if(operation == 1)
		{
			int w = getRoot(node1);
			int q = getRoot(node2);
			
			if(w!=q)
				tata[q] = w;			
		}
		else
		{
			if(getRoot(node1) == getRoot(node2))
				fprintf(out,"DA\n");
			else 
				fprintf(out,"NU\n");
		}
	}
	
	fclose(in);
	fclose(out);
	return 0;
}

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