Cod sursa(job #2203710)

Utilizator shantih1Alex S Hill shantih1 Data 12 mai 2018 22:15:33
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n,m,o,x,y,i,j,m1,m2;
struct nod
{	int f,h;} arb[100015];

int rad(int nd)
{
	if(arb[nd].f!=0)
	{
		int p=rad(arb[nd].f);
		arb[nd].f=p;
		return p;
	}
	else return nd;
}

int main() {
	
	fin>>n>>m;
	for(i=1;i<=n;i++)
	{
		arb[i].f=0;
		arb[i].h=1;
	}
	
	for(i=1;i<=m;i++)
	{
		fin>>o>>x>>y;
		if(o==1)
		{
			m1=rad(x);
			m2=rad(y);
			if(arb[m1].h<=arb[m2].h)
			{
				arb[m1].f=m2;
				arb[m2].h=max(arb[m2].h,arb[m1].h+1);
			}
			else 
			{
				arb[m2].f=m1;
				arb[m1].h=max(arb[m1].h,arb[m2].h+1);
			}
		}
		if(o==2)
		{
			if(rad(x)==rad(y))	cout<<"DA\n";
			else	cout<<"NU\n";
		}
	}
}