Cod sursa(job #443790)

Utilizator IlieeUngureanu Ilie Iliee Data 18 aprilie 2010 13:59:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<cstdio>
#include<vector>
using namespace std;
void read(),solve();
vector<int> vx,vy;
int n,m,i,x,y,rx,ry,c,T[100100];
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d",&n,&m);
}
void solve()
{
	vector<int>::iterator it;
	for(i=1;i<=n;i++)
		T[i]=i;
	for(;m;m--)
	{
		scanf("%d%d%d",&c,&x,&y);
		vx.resize(0); vy.resize(0);
		for(i=x;;)
		{
			vx.push_back(i);
			if(T[i]==i)
			{
				rx=i;
				break;
			}
			i=T[i];
		}
		for(i=y;;)
		{
			vy.push_back(i);
			if(T[i]==i)
			{
				ry=i;
				break;
			}
			i=T[i];
		}
		if(c==1)
			rx=ry;
		if(c==2)
		{
			if(rx==ry)
				printf("DA\n");
			else
				printf("NU\n");
		}
		for(it=vx.begin();it!=vx.end();it++)
			T[*it]=rx;
		for(it=vy.begin();it!=vy.end();it++)
			T[*it]=ry;
	}
}