Cod sursa(job #1944182)

Utilizator vlcmodanModan Valentin vlcmodan Data 28 martie 2017 23:17:28
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>





int n, m, t[100010], r[100010];



int found( int x)
{
	
	int rad;

	for (rad = x; rad != t[rad]; rad = t[rad]);

	while (x != t[x])
	{
		int aux = t[x];
		t[x] = rad;
		x = aux;
	}

	return rad;

}

void unifeste(int x, int y)
{

	if (r[x] < r[y])
	{
		t[x] = y;
	}
	else
	{
		t[y] = x;
	}

	if (r[x] == r[y])
	{
		r[x]++;
	}


}

int main()
{
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);

	scanf("%d %d", &n, &m);



	

	for (int i = 1; i <= n; ++i)
	{
		t[i] = i;
		r[i] = 1;
	}

	for (int i = 1; i <= m; i++)
	{
		int tip,x,y;
		scanf("%d %d %d", &tip, &x, &y);

		if (tip == 1)
		{
			unifeste( x, y);
		}
		else
		{
			if (found( x) == found( y))
			{
				printf("DA\n");
			}
			else
			{
				printf("NU\n");
			}
		}
	}

	fclose(stdin);
	fclose(stdout);



	return 0;
}