Cod sursa(job #348355)

Utilizator Addy.Adrian Draghici Addy. Data 15 septembrie 2009 16:14:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#define DIM 100001

int T[DIM];
int n,m,i,x,y,cod;

FILE *f = fopen("disjoint.in","r");
FILE *g = fopen("disjoint.out","w");

void ask(int x, int y) {
	int i,j;
	i = x;
	while (T[i]>0)
		i = T[i];
	j = y;
	while (T[j]>0)
		j = T[j];
	if (i==j)
		fprintf(g,"DA\n");
	else
		fprintf(g,"NU\n");
}

void reuneste(int x, int y) {
	int i,j;
	i = x;
	while (T[i]>0)
		i = T[i];
	j = y;
	while (T[j]>0)
		j = T[j];
	if (T[i]<T[j]) {
		T[i] += T[j];
		T[j] = i;
	}
	else {
		T[j] += T[i];
		T[i] = j;
	}
}

int main() {
	
	fscanf(f,"%d%d",&n,&m);
	
	for (i=1; i<=n; i++)
		T[i] = -1;
	
	for (i=1; i<=m; i++) {
		fscanf(f,"%d%d%d",&cod,&x,&y);
		if (cod==1)
			reuneste(x,y);
		else
			ask(x,y);
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}