Cod sursa(job #544721)

Utilizator nautilusCohal Alexandru nautilus Data 1 martie 2011 23:44:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
#define dmax 100010
using namespace std;

int n,m;
int tata[dmax],rang[dmax];


int find(int x)
{
 if (x != tata[x])
	 tata[x] = find(tata[x]);
 
 return tata[x];
}


void uneste(int x, int y)
{
 if (rang[x] > rang[y])
	 {
	  tata[y] = x; 
	  rang[y]++;
	 } else
	 {
	  tata[x] = y; 
	  rang[x]++;
	 } 
}


void reuniune(int x, int y)
{
 uneste (find(x), find(y));
}


void citire()
{
 int i,op,x,y;
	
 ifstream fin("disjoint.in");
 ofstream fout("disjoint.out");
 
 fin>>n>>m;
 
 for (i=1; i<=n; i++)
	 tata[i] = i;
 
 for (i=1; i<=m; i++)
	 {
	  fin>>op>>x>>y;
	  
	  if (op == 1)
		  reuniune(x, y); else
		  if (find(x) == find(y))
			  fout<<"DA"<<'\n'; else
			  fout<<"NU"<<'\n';
	 }
	
 fin.close();
 fout.close();
}


int main()
{
	
 citire();
	
 return 0;
}