Cod sursa(job #2466347)

Utilizator Iulia25Hosu Iulia Iulia25 Data 1 octombrie 2019 22:11:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

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

int n, m, cod, x, y;
int tata[100005];

inline void set_tata(int k, int val)	{
  int cp;
  while (tata[k] > 0)	 {
		cp = tata[k];
		tata[k] = val;
    k = cp;
  }
}

inline int val_tata(int k)	{
  while (tata[k] > 0)
		k = tata[k];
	return k;
}

int main()	{
	fin >> n >> m;
	for (int i = 1; i <= n; ++i)
		tata[i] = -1;
	for (int i = 1; i <= m; ++i)	{
		fin >> cod >> x >> y;
		if (cod == 2)	 {
			int tx, ty;
			tx = val_tata(x);
			ty = val_tata(y);
			if (tx == ty)
				fout << "DA\n";
			else
				fout << "NU\n";
			continue;
		}
		int tx, ty;
		tx = val_tata(x);
		ty = val_tata(y);
    if (tata[tx] > tata[ty])	{
			swap(tx, ty);
			swap(x, y);
		}
    tata[tx] += tata[ty];
    tata[ty] = tx;
    set_tata(x, tx);
    set_tata(y, tx);
	}
	return 0;
}