Cod sursa(job #883823)

Utilizator DanutsDanut Rusu Danuts Data 20 februarie 2013 13:50:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[100001],r[100001],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 (){
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d %d\n",&n,&m);
	for(int i=1;i<=n;i++){
			t[i]=i;
			r[i]=1;
	}
	for(int i=1;i<=m;i++){
			scanf("%d %d %d",&cd,&x,&y);
			if(cd==2){
					if(rad(x)==rad(y))
							printf("DA\n");
					else
							printf("NU\n");
			}
			else
				{
				if(rad(x)==rad(y)){
					printf("%d\n",&i);
					return 0;
				}
				unire(rad(x),rad(y));
			}
	}
	return 0;
}