Cod sursa(job #2388289)

Utilizator Nemo123456nichita Nemo123456 Data 25 martie 2019 21:08:24
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int n,m,a[100005],rang[100005],x,y,q;

int cauta(int x)
{
	int r,y;
	for(r=x ; a[r]!=r ; r=a[r]);
	
	for(;a[x]!=x;)
		{
			y=a[x];
			a[x]=r;
			x=y;
		}
	return r;
}

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


int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		a[i]=i;
	
	for(int i=1;i<=m;i++)
		{
			cin>>q>>x>>y;
			if(q==2)
				{
					if(cauta(x)==cauta(y)) cout<<"DA"<<endl;
					else cout<<"NU"<<endl;
				}
			else uneste(cauta(x),cauta(y));
		}
}