Cod sursa(job #390419)

Utilizator socheoSorodoc Ionut socheo Data 3 februarie 2010 18:42:31
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>

int n,q,t[100001],r[100001],i,j,w,e;
void lipesc(int x,int y)
{	if(r[x]>r[y])
		t[y]=x;
	if(r[x]<r[y])
		t[x]=y;
	if(r[x]==r[y])
		{t[y]=x;
		r[x]++;
		}
}
int gasesc(int x)
{	int p=x,m;
	while(t[x]!=x)
		x=t[x];
	while(t[p]!=p)
	{	m=t[p];
		t[p]=x;
		p=m;
	}
	return x;
}

int main()
{	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	
	scanf("%d%d",&n,&q);
	
	for(i=1;i<=n;i++)
		{t[i]=i;
		r[i]=1;
		}
	
	for(int u=1;u<=q;u++)
		{ scanf("%d%d%d",&w,&e,&j);
			if(w==1)
			lipesc(e,j);
			else if(gasesc(e)==gasesc(j))
					printf("DA\n");
				else printf("NU\n");
				
		}
		
	return 0;}