Cod sursa(job #3355611)

Utilizator TianaInfoLitcanu Tiana TianaInfo Data 23 mai 2026 15:33:54
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,parinte[100005],a,b,tip,drum[100005];
int getroot(int a)
{
	if(parinte[a]==a) return a;
	parinte[a]=getroot(parinte[a]);
	return parinte[a];
}
void unire(int a,int b)
{
	a=getroot(a),b=getroot(b);
	if(drum[a]<drum[b]) swap(a,b);
	parinte[b]=a;
	drum[a]+=drum[b];
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		parinte[i]=i;
		drum[i]=1;
	}
	for (int i=1;i<=m;i++)
	{
		cin>>tip>>a>>b;
		if(tip==1) unire(a,b);
		else
		{
			a=getroot(a);
			b=getroot(b);
			if(a==b) cout<<"DA"<<'\n';
			else cout<<"NU"<<'\n';
		}
	}
	return 0;
}