Cod sursa(job #333669)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 23 iulie 2009 15:13:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>
#include<vector>
using namespace std;
vector<int> U,V;
int n,m,i,dad[100100];
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)dad[i]=i;
}
void solve()
{
	vector<int>::iterator it;
	int c,u,v,d1,d2;
	for(;m;m--)
	{
		scanf("%d%d%d",&c,&u,&v);
		U.resize(0);V.resize(0);
		for(;;){U.push_back(u);if(u==dad[u]){d1=u;break;}u=dad[u];}
		for(;;){V.push_back(v);if(v==dad[v]){d2=v;break;}v=dad[v];}
		if(c==1)d2=d1;
		else d2==d1?printf("DA\n"):printf("NU\n");
		for(it=U.begin();it!=U.end();it++)dad[*it]=d1;
		for(it=V.begin();it!=V.end();it++)dad[*it]=d2;
	}
}