Cod sursa(job #2000133)

Utilizator 00MikeComputer00Mihnea Andreescu 00MikeComputer00 Data 12 iulie 2017 18:12:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
const int nm=100005;
int t[nm],h[nm];
int findset(int x)
{
	while(t[x]!=x)
		x=t[x];
	return x;
}
void unite(int x,int y)
{
	if(h[x]==h[y])
	{
		t[y]=x;
		h[x]++;
	}
	else	
		if(h[x]>h[y])
			t[y]=x;
		else 
			t[x]=y;
}
int main()
{
	int n,m,i,c,x,y;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		t[i]=i;
		h[i]=1;
	}
	for(i=1;i<=m;i++)
	{
		cin>>c>>x>>y;
		x=findset(x);
		y=findset(y);
		if(c==1)
			unite(x,y);
		else
			if(x==y)
				cout<<"DA\n";
			else
				cout<<"NU\n";
	}
    cin.close();
    cout.close();
	return 0;
}