Cod sursa(job #3271815)

Utilizator contandrei3Andrei Mihai contandrei3 Data 27 ianuarie 2025 14:19:50
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.64 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int t[100005],h[100005],i,n,m,c,r1,r2;
int tata (int r)
{
	int x=r;
	while (x!=t[x])
		x=t[x];
	return x;
}
void unif (int r1,int r2)
{
	r1=tata(r1);
	r2=tata(r2);
	if (h[r1]<h[r2])
		t[r1]=t[r2];
	else
		t[r2]=t[r1];
	if (h[r1]==h[r2]) h[r1]++;
}
int main()
{
	fin>>n>>m;
	for (i=1;i<=n;i++)
		{
			h[i]=1;
			t[i]=i;
		}
	for (i=1;i<=m;i++)
		{
			fin>>c>>r1>>r2;
			if (c==1)
				unif(r1,r2);
			else
				if (tata(r1)==tata(r2))
					fout<<"DA"<<'\n';
				else fout<<"NU"<<'\n';
		}
    return  0;
}