Cod sursa(job #881105)

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

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