Cod sursa(job #404781)

Utilizator alex@ndraAlexandra alex@ndra Data 26 februarie 2010 17:58:36
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
using namespace std;

int vect[100001],n,card[100001];

void modifica(int x, int y)
{
	int multime1, multime2,i;
  multime1=vect[x];
  multime2=vect[y];
  
  
  if(card[x]<card[y])
     {
		for(i=1;i<=n;i++)
    	  if(vect[i]==multime1)
		    vect[i]=multime2; 
     }
  else
	  for(i=1;i<=n;i++)
    	if(vect[i]==multime2)
		    vect[i]=multime1;
		
	card[x]=card[y]=card[x]+card[y];

}

int main()
{
	int op,x,y,i,m;
	
    freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	 scanf("%d%d",&n,&m);
	  
	for(i=1;i<=n;i++)
		{
		 vect[i]=i;
	     card[i]=1;
	    }
	
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&op,&x,&y);
		
		if(op==1)
		  modifica(x,y);
		else
		{
		  if(vect[x]==vect[y])
	           printf("DA\n");
	      else
	          printf("NU\n");
		}
	}
	
 return 0;
}