Cod sursa(job #2782334)

Utilizator alexdmnDamian Alexandru alexdmn Data 12 octombrie 2021 10:33:53
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>

using namespace std;
int tata[100005],h[100005];
int fader(int x)
{
	while(x!=tata[x])
		x=tata[x];
	return x;
}
int unire(int x, int y)
{
    if(h[x]>h[y])
		tata[y]=tata[x];
	else if(h[y]>h[x])
		tata[x]=tata[y];
	else
	{
		tata[y]=x;
		h[x]++;
	}
}
int main()
{
	ifstream cin("disjoint.in");
	ofstream cout("disjoint.out");

	int n,m,c,a,b,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
	{
		h[i]=1;
		tata[i]=i;
	}

    for(int i=0;i<m;i++)
	{
		cin>>c>>a>>b;
        if(c==1)
		{
            unire(fader(a),fader(b));
		}
		if(c==2)
		{
			if(fader(a)==fader(b))
				cout<<"DA"<<'\n';
			else
				cout<<"NU"<<'\n';
		}
	}

    return 0;
}