Cod sursa(job #2115903)

Utilizator dragomir_ioanDragomir Ioan dragomir_ioan Data 27 ianuarie 2018 11:18:13
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.62 kb
#include <stdio.h>
#include <stdbool.h>

int v[100001];

int boss(int n) {
	if(v[n] == n) return n;
	return v[n] = boss(v[n]);
}

void join(int a, int b) {
	v[boss(a)] = boss(b);
}

bool query(int a, int b) {
	return boss(a) == boss(b);
}

int main() {
	int n, m, i, op, a, b;

	FILE *fin = fopen("disjoint.in", "r");
	FILE *fout = fopen("disjoint.out", "w");
	fscanf(fin, "%d%d", &n, &m);

	for(i=1; i<=n; i++) v[i] = i;
	for(i=1; i<=m; i++) {
		fscanf(fin, "%d%d%d", &op, &a, &b);
		op == 1 ? join(a, b) : fprintf(fout, query(a, b) ? "DA\n" : "NU\n");
	}

	fclose(fin);
	fclose(fout);

	return 0;
}