Cod sursa(job #803165)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 27 octombrie 2012 10:14:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>
using namespace std;
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
int v[100010],n,m;

int main(void){
	register int i,j,t,x,y;
		
	fscanf(f,"%d %d",&n,&m);
	for(i=1;i<=n;i++){
		v[i]=-1;
	}
	int x1,y1;
	for(i=1;i<=m;i++){
		fscanf(f,"%d %d %d",&t,&x,&y);
		if(t==1){
			//unim radacinile arborilor
			x1=x,y1=y;
			while(v[x1]>0){
				x1=v[x1];
			}
			while(v[y1]>0){
				y1=v[y1];
			}
			if(v[x1]<v[y1]){
				v[x1]+=v[y1];
				v[y1]=x1;
			}
			else{
				v[y1]+=v[x1];
				v[x1]=y1;
			}
			continue;
		}
		if(t==2){
			x1=x,y1=y;
			while(v[x1]>0){
				x1=v[x1];
			}
			while(v[y1]>0){
				y1=v[y1];
			}
			if(y1==x1)
				fprintf(g,"DA\n");
			else
				fprintf(g,"NU\n");
		}
	}
	return 0;
}