Cod sursa(job #883815)

Utilizator DanutsDanut Rusu Danuts Data 20 februarie 2013 13:38:28
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb

#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[100],r[100],n,m,cd,x,y;

int rad(int x){
		int aux,R;
		for(R=x;t[R]!=R;R=t[R]);
		for(;t[x]!=x;){
				aux=t[x];
				t[x]=R;
				x=aux;
		}
		return R;
}
void unire(int x,int y){
		if(r[x]<r[y])
				t[x]=y;
		else
				t[y]=x;
		if(r[x]==r[y])
				r[x]++;
}
int main (){
	f>>n>>m;
	for(int i=1;i<=n;i++){
			t[i]=i;
			r[i]=1;
	}
	for(int i=1;i<=m;i++){
			f>>cd>>x>>y;
			if(cd==2){
					if(rad(x)==rad(y))
							g<<"DA"<<endl;
					else
							g<<"NU"<<endl;
			}
			else
					{
						if(rad(x)==rad(y)){
							g<<i;
							return 0;
						}
					unire(rad(x),rad(y));
					}
	}
	return 0;
}