Cod sursa(job #1747181)

Utilizator MoleRatFuia Mihai MoleRat Data 24 august 2016 16:33:53
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
using namespace std;
#define lim 100001
int N,M,P[lim],NR[lim];
int i,x,y,z;
int ca,cb;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int p(int a)
{
	if (a==P[a])
		return a;
	return p(P[a]);
}
int main()
{
	fi>>N>>M;
	for (i=1;i<=N;i++)
	{
		P[i]=i;
		NR[i]=1;
	}
	for (i=1;i<=M;i++)
	{
		fi>>z>>x>>y;
		if (z==1)
		{
			ca=p(x);
			cb=p(y);
			if (ca<cb)
			{
				P[cb]=ca;
				NR[cb]+=NR[ca];
			}
			else
			{
				P[ca]=cb;
				NR[ca]+=NR[cb];
			}	
		}
		else
		{
			ca=p(x);
			cb=p(y);
			if (ca==cb)
				fo<<"DA\n";
			else
				fo<<"NU\n";
		}
	}
	fi.close();
	fo.close();
	return 0;
}