Cod sursa(job #803159)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 27 octombrie 2012 10:01:36
Problema Paduri de multimi disjuncte Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <stdio.h>
using namespace std;
//ifstream f("disjoint.in");
//ofstream g("disjoint.out");
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;
		
	//f>>n>>m;
	fscanf(f,"%d %d",&n,&m);
	for(i=1;i<=n;i++){
		v[i]=-1;
	}
	int x1,y1;
	for(i=1;i<=m;i++){
		//f>>t>>x>>y;
		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[y]>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)
				//g<<"DA"<<"\n";
				fprintf(g,"DA\n");
			else
				//g<<"NU"<<"\n";
				fprintf(g,"NU\n");
		}
	}
	return 0;
}