Cod sursa(job #343515)

Utilizator marinaMarina Horlescu marina Data 26 august 2009 09:34:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#define INPUT "disjoint.in"
#define OUTPUT "disjoint.out"

int tata(int nod, int *t)
{
	if(t[nod] == -1) return nod;
	else return tata(t[nod], t);
}
int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	
	int n, m;
	scanf("%d %d", &n, &m);
	
	int *t = new int[n];
	int i;
	for(i = 0; i < n; ++i) t[i] = -1;
	
	for(i = 0; i < m; ++i)
	{
		int tip, x, y;
		scanf("%d %d %d", &tip, &x, &y); --x; --y;
		if(tip == 1)
		{
			int a = tata(x, t);
			int b = tata(y, t);
			if(a != b) 
			{
				t[a] = b; t[x] = b;
				if(y != b) t[y] = b;
			}
				
		}
		else
		{
			if(tata(x, t) == tata(y, t)) printf("DA\n");
			else printf("NU\n");
		}
	}
	return 0;
}