Cod sursa(job #1246148)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 20 octombrie 2014 17:55:53
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
#include<cstdio>
using namespace std;
//ifstream in("disjoint.in");
//ofstream out("disjoint.out");

const int nmax = 100006;
int radacina[nmax], n, m, cod, x, y, radx, rady, aux, grad[nmax];

int find_radacina( int x ) {
    if(radacina[x]==x)
	{
        return x;
    }
	else
	{
        return ( radacina[x] = find_radacina(radacina[x]));
    }
}

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

	scanf("%d%d", &n, &m);
	for(int i = 1; i<=n; i++)
		grad[i] = 1;
	for(int shp = 0; shp<m; shp++)
	{
		scanf("%d%d%d", &cod, &x, &y);
		
		radx = find_radacina(x);
		rady = find_radacina(y);

		if(cod==1)
		{
			if(grad[radx]<grad[rady])
			{
                grad[rady] += grad[radx];
                radacina[radx] = rady;
            }
			else
			{
                grad[radx] += grad[rady];
                radacina[rady] = radx;
            }
		}

		if(cod==2)
		{
			if(radx==rady)
			{
				printf("DA\n");
			}
			else
			{
				printf("NU\n");
			}
		}
	}

	return player_unu;
}