Cod sursa(job #881080)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 17 februarie 2013 18:12:58
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int i,op,e1,e2,t[100002],nr[100002],n,m,
j;

int parcurge(int x){
	int s;
	for(s=t[x];s!=t[s];s=t[s]);
	
	return s;
}
void solve(int e1,int e2){
	if(nr[e1]>nr[e2])
				t[e2]=e1;
			else
				if(nr[e1]<nr[e2])
					t[e1]=e2;
				else{
					++nr[e1];
					t[e2]=e1;
				}
}
int main(){
	f>>n>>m;
	for(i=1;i<=n;++i){
		t[i]=i;
		nr[i]=1;
	}
	for(i=1;i<=m;++i){
		f>>op>>e1>>e2;
		if(op==1){
			solve(parcurge(e1),parcurge(e2));
		}
		else{
		
			if(parcurge(e1)==parcurge(e2)){
					g<<"DA"<<endl;
				}
				else
					g<<"NU"<<endl;
		}
	}
	return 0;
}