Cod sursa(job #274952)

Utilizator diannaDiaconu Diana dianna Data 10 martie 2009 09:16:04
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<fstream.h>
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const long Nmax=100100;
long n,m,h[Nmax],t[Nmax];

void verif(long x,long y)
{
 if(t[x]==t[y])
	g<<"DA"<<'\n';
 else
	g<<"NU"<<'\n';
}

void reun(long x,long y)
{
 if(h[x]<h[y])
 {
	long z=x;
	x=y;
	y=z;
 }
 long z=t[y];
 h[x]+=h[y];
 long q=h[y];
 for(long j=1;j<=n && q;j++)
	if(t[j]==z)
	{
		t[j]=t[x];
		h[j]=h[x];
		q--;
	}
}

void init()
{
 for(long i=1;i<=n;i++)
 {
	t[i]=i;
	h[i]=1;
 }
}

void citire()
{
 int z;
 long x,y;
 f>>n>>m;
 init();
 for(long i=0;i<m;i++)
 {
	f>>z>>x>>y;
	switch(z)
	{
	case 1: reun(x,y);
		break;
	case 2: verif(x,y);
		break;
	}
 }
}

int main()
{
 citire();
 f.close();
 g.close();
 return 0;
}