Cod sursa(job #650145)

Utilizator johnny2008Diaconu Ion johnny2008 Data 17 decembrie 2011 14:17:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
#define nmax 100000
int tata[nmax];
int mare[nmax];
int n,m;
ifstream f("disjoint.in");
	ofstream g("disjoint.out");
void reunire(int tata1,int tata2){
	while(tata1!=tata[tata1])
		tata1=tata[tata1];
	while(tata2!=tata[tata2])
		tata2=tata[tata2];
	if(mare[tata1]>mare[tata2]){
		tata[tata2]=tata1;
		mare[tata1]=mare[tata1]+mare[tata2];
	}
	else{
		tata[tata1]=tata2;
		mare[tata2]=mare[tata1]+mare[tata2];
	}

}
void verif(int a,int b){
	while(a!=tata[a])
		a=tata[a];
	while(b!=tata[b])
		b=tata[b];
	if(a==b)
		g<<"DA\n";
	else
		g<<"NU\n";
}	
int main(){
	
	f>>n>>m;
	int i,j;
	for(i=1;i<=n;i++){
		tata[i]=i;
		mare[i]=1;
	}
	for(i=1;i<=m;i++){
		int a,b,c;
		f>>a>>b>>c;
		if(a==1)
			reunire(b,c);
		else
			verif(b,c);
	}
	return 0;
}