Cod sursa(job #1802110)

Utilizator flibiaVisanu Cristian flibia Data 9 noiembrie 2016 21:11:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

int n, m, p[100003], r[100004], pos, x, y, cod;

int find(int nod)
{
	if(p[nod] == nod) return nod;
	pos = find(p[nod]);
	p[nod] = pos;
	return pos;
}

void uneste(int a, int b)
{
	a = find(a);
	b = find(b);
	if(r[a] > r[b]) p[b] = a;
	else p[a] = b;
	if(r[a] == r[b]) r[b]++;
}

int main(){
	in >> n >> m;
	for(int i = 1; i <= n; i++)	
	{
		p[i] = i;
		r[i] = 1;
	}
	for(int i = 1; i <= m; i++)
	{
		in >> cod >> x >> y;
		if(cod == 1)
		{
			uneste(x, y);
		}
		else
		{
			if(find(x) == find(y)) out << "DA\n"; else out << "NU\n";
		}
	}
	return 0;
}