Cod sursa(job #235900)

Utilizator floringh06Florin Ghesu floringh06 Data 26 decembrie 2008 12:12:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define FIN "disjoint.in"
#define FOUT "disjoint.out"
#define MAX_N 100005

int M[MAX_N];
int H[MAX_N];

int N, K;


	int tata (int c)
	{
		while (M[c] != c)
			c = M[c];
		return c;
	}

	int main ()
	{
		int cod, x, y, i;
	
		freopen (FIN, "r", stdin);
		freopen (FOUT, "w", stdout);

		scanf ("%d %d", &N, &K);

		for (i = 1; i <= N; ++i) M[i] = i, H[i] = 1;
		while (K--)
		{
			scanf ("%d %d %d", &cod, &x, &y);
			if (cod == 1)
			{
				if (H[x] < H[y]) 
				{
					int tx = tata(x), ty = tata (y);
					M[tx] = ty;
				}
				if (H[x] > H[y]) 
				{
					int tx = tata(x), ty = tata (y);
					M[ty] = tx;
				}
				if (H[x] == H[y])
				{
					int tx = tata(x), ty = tata (y);
					M[tx] = ty, ++H[ty];
				}
			}
			else if (tata(x) == tata(y)) printf ("DA\n"); else printf ("NU\n");
		}

		return 0;
	}