Cod sursa(job #1830413)

Utilizator andreiulianAndrei andreiulian Data 16 decembrie 2016 18:21:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<iostream>
#include<fstream>
#include<algorithm>
#include<set>
#include<climits>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<bitset>
#define mp make_pair
#define pb push_back
#define ff(i, x, n) for (int i = x; i <= n; ++i)
#define dd(i) cout << i <<'\n'
	#define READ_FROM_FILE
using namespace std;
int tt(int x);
int n, m, t[100005], h[100005];
int main(){
	#ifdef READ_FROM_FILE
		ifstream in("disjoint.in");
		#define cin in
	#endif
	ofstream out("disjoint.out");
	int x, y, cod;
	cin >> n >> m;
	ff(i, 1, n) {
		t[i] = i;
		h[i] = 1;
	}
	while (m--) {
		cin >> cod >> x >> y;
		if (cod == 1) {
			if (h[t[x]] > h[t[y]]) {
				t[t[y]] = t[x];
			}
			if (h[t[x]] < h[t[y]]) {
				t[t[x]] = t[y];
			}
			if (h[t[x]] == h[t[y]]) {
				t[t[y]] = t[x];
				++h[t[x]];
			}
		} else {
			if (tt(x) == tt(y)) {
				out << "DA\n";
			} else {
				out << "NU\n";
			}
		}
	}
}

int tt(int x) {
	while(t[t[x]] != t[x]) {
		t[x] = t[t[x]];
	}
	return t[x];
}