Cod sursa(job #1747200)

Utilizator MoleRatFuia Mihai MoleRat Data 24 august 2016 16:41:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int i;
int P[100001],NR[100001];
int N,M,op;
int tip,a,b;
int rada, radb;

int p(int v)
{
	if (v==P[v])
		return v;
	else
		return p(P[v]);
}

int main()
{
	fi>>N>>M;
	for (i=1;i<=N;i++)
	{
		P[i]=i;
		NR[i]=1;
	}
	for (op=1;op<=M;op++)
	{
		fi>>tip;
		if (tip==1)
		{
			fi>>a>>b;
			// reuniune a multimilor in care se afla a si b
			rada=p(a);
			radb=p(b);
			if (rada==radb)
				;
			else
				if (NR[rada]<=NR[radb])
				{
					NR[radb]+=NR[rada];
					P[rada]=radb;
				}
				else
				{
					NR[rada]+=NR[radb];
					P[radb]=rada;
				}
		}
		else
		{
			fi>>a>>b;
			rada=p(a);
			radb=p(b);
			if (rada==radb)
				fo<<"DA\n";
			else
				fo<<"NU\n";
		}
	}
	fi.close();
	fo.close();
	return 0;
}