Cod sursa(job #361339)

Utilizator proflaurianPanaete Adrian proflaurian Data 4 noiembrie 2009 18:29:32
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> d,va,vb;
int n,m,i,a,b,c;
void read(),solve(),upd();
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()
{
	for(i=0;i<=n;i++)d.push_back(i);
	for(;m;m--)
	{
		scanf("%d%d%d",&c,&a,&b);
		upd();
		if(c==2)a==b?printf("DA\n"):printf("NU\n");
		else d[a]=b;
	}
}
void upd()
{
	vector<int>::iterator it;
	va.resize(0);vb.resize(0);
	for(;d[a]-a;a=d[a])va.push_back(a);va.push_back(a);
	for(;d[b]-b;b=d[b])vb.push_back(b);vb.push_back(b);
	for(it=va.begin();it!=va.end();it++)d[*it]=a;
	for(it=vb.begin();it!=vb.end();it++)d[*it]=b;
}