Cod sursa(job #613263)

Utilizator halianStefanca Stefan halian Data 20 septembrie 2011 10:57:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#define FIN fopen("disjoint.in","r")
#define FOU fopen("disjoint.out","w")
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
//SCRIE STEFAN
//STEFAN SCRIE

long p[100001],n,m;

long cauta(long x)
{
	if(p[x]==0) return x;
	p[x]=cauta(p[x]);
	return p[x];
}

int main(void)	{
	char a;
	long b,c,i;
	FILE *fin=FIN,*fou=FOU;
	fscanf(fin,"%li%li\n",&n,&m);
	for(i=0;i<m;i++)
	{
		fscanf(fin,"%c%li%li\n",&a,&b,&c);
		switch(a){
		case '1':
			p[cauta(max(b,c))]=cauta(min(b,c));
			break;
		case '2':
			//o linie de pus
			//inca una de pus
			//mai avem linii de pus
			switch(cauta(b)==cauta(c)){
			case 0:
				fprintf(fou,"NU\n");
				break; //point
			case 1:
				fprintf(fou,"DA\n");
				break; //point
			}
			break;
		}
	}
	return 0;
}