Cod sursa(job #455129)

Utilizator erzsikeRusz Elisabeta erzsike Data 13 mai 2010 07:02:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 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; 
	} 
}