Cod sursa(job #2580869)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 14 martie 2020 12:05:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;
int n,m,tata[100003],lungime[100003];
int find_root (int nod) {
	if(tata[nod]==nod) 
		return nod;
	else {
		tata[nod]=find_root(tata[nod]);
		return tata[nod];
	}
}
void union_tree (int x, int y) {
	x=find_root(x);y=find_root(y);
	if(x!=y) {
		if(lungime[x]>lungime[y]) 
			tata[y]=x;
		else if (lungime[x]<lungime[y])
			tata[x]=y;
		else
			tata[y]=x,++lungime[x];
	}
}
int main () {
	int q,nr,nr1;
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d", &n, &m);++m;
	for(int i=1;i<=n;++i)
		tata[i]=i;
	while(--m) {
		scanf("%d%d%d", &q, &nr, &nr1);
		if(q==1)
			union_tree(nr,nr1);
		else
			if(find_root(nr)==find_root(nr1))
				printf("DA\n");
			else
				printf("NU\n");
	}
	return 0;
}