Cod sursa(job #2643762)

Utilizator UnknownPercentageBuca Mihnea-Vicentiu UnknownPercentage Data 21 august 2020 15:02:10
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;


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

map <int, int> M;
int t[200001];
int T, n, x, y, op, k;

int Find(int x){

	int z, y;
	y = x;
	while(t[x]) {x = t[x];}

	while(t[y]){
		z = t[y];
		t[y] = x;
		y = z;
	}

	return x;
}

void Union(int x, int y){

	t[y] = x;
}


int main(){

	f >> n >> T;
	n = 0;
	while(T--){

		f >> op >> x >> y;
		k = 0;
		auto it = M.find(x);
		if(it == M.end()) {k = 1;n++;M[x] = n;}
		it = M.find(y);
		if(it == M.end()) {k = 1;n++;M[y] = n;}

		x = M[x], y = M[y];
		x = Find(x), y = Find(y);

		if(op == 1){
			if(x != y) Union(x, y);
		}
		else{
			if(k == 1) g << "NU\n";
			else if(x == y) g << "DA\n";
			else g << "NU\n";
		}
	}
}