Cod sursa(job #405017)

Utilizator alex@ndraAlexandra alex@ndra Data 27 februarie 2010 11:32:09
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#include<vector>

using namespace std;

vector<int> card(100001,1);
int padure[100001],n;

void reuneste(int x, int y)
{
	int m1, m2,i;
  m1=padure[x];
  m2=padure[y];
  
  if(card[y]<card[x])
    {
	  for(i=1;i<=n;i++)
	    if(padure[i]==m1)
	       padure[i]=m2;
    }
  else
  {
	for(i=1;i<=n;i++)
	    if(padure[i]==m2)
	       padure[i]=m1;
  }
  
  card[x]=card[y]=card[x]+card[y];
}

void verifica(int x, int y)
{
	if(padure[x]==padure[y])
		printf("DA\n");
	else
		printf("NU\n");
}

int main()
{
	int m, i, cod, x,y;
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	
	scanf("%d%d",&n,&m);
	
	for(i=1;i<=n;i++)
		padure[i]=i;
	
	for(i=1;i<=m;i++)
	{
	  scanf("%d%d%d",&cod,&x,&y);
	  
	    if(cod==1)
			reuneste(x,y);
		else
			verifica(x,y);
	}
	
	return 0;
}