Cod sursa(job #636257)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 19 noiembrie 2011 18:08:44
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#include <string.h>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,x,y,op,r[100001],t;

inline void upgrade(int x,int y){
	register int rx=x,ry=y;
	while(r[rx]>0)
		rx=r[rx];
	while(r[ry]>0)
		ry=r[ry];
	if(r[rx]<r[ry]){
		r[rx]+=r[ry];
		r[ry]=rx;
	}
	else{
		r[ry]+=r[rx];
		r[rx]=ry;
	}
	
}

inline bool querry(int x,int y){
	register int rx=x,ry=y;
	while(r[rx]>0)
		rx=r[rx];
	while(r[ry]>0)
		ry=r[ry];
	return (rx==ry);
}

int main(void){
	register int i,j;
	
	f>>n>>op;
	memset(r,-1,n+2);
	for(;op>0;op--){
		f>>t>>x>>y;
		if(t==1){
			upgrade(x,y);
			continue;
		}
		if(querry(x,y)){
			g<<"DA"<<"\n";
			continue;
		}
		g<<"NU"<<"\n";
	}
	return 0;
}