Cod sursa(job #826289)

Utilizator josephsmateiJosephs Matei josephsmatei Data 30 noiembrie 2012 16:08:06
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
int t[100001];
int h[100001];
int find(int x)
{
	if(t[x]==x)return x;
	return find(t[x]);	
}

void unite(int u,int v)
{
	if(h[u]==h[v])
	{
		t[u]=t[v];h[u]++;
	}
	else
	{
		if(h[u]<h[v])
		{
			t[u]=t[v];
		}
		else
		{
			t[v]=t[u];
		}
	}
}

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