Cod sursa(job #2435818)

Utilizator ShayTeodor Matei Shay Data 4 iulie 2019 13:27:25
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <string.h>

inline int read() {
	int n = 0;
	char c = getchar_unlocked();

	while (!('0' <= c && c <= '9')) {
		c = getchar_unlocked();
	}

	while ('0' <= c && c <= '9') {
		n = (n << 3) + (n << 1) + c - '0';
		c = getchar_unlocked();
	}

	return n;
}

int find (int x, int parent[]) {
	
	while (parent[x] != x) {
		x = parent[x];
	}

	return x;
}

void unite (int x, int y, int parent[]) {
	parent[find(x, parent)] = find(y, parent);
}

int main() {
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);

	int n, m, x, y, query;

	n = read(), m = read();

	int parent[n + 1];

	for (int i = 1 ; i <= n ; ++i) {
		parent[i] = i;
	}

	for (; m ; --m) {
		query = read(), x = read(), y = read();

		switch (query) {
			case 1: unite(find(x, parent), find(y, parent), parent);
					break;
			case 2: if (find(x, parent) == find(y, parent)) {
						putchar('D'), putchar('A'), putchar('\n');
					} else {
						putchar('N'), putchar('U'), putchar('\n');
					}
					break;
			default: break;
		}
	}

	return 0;
}