Cod sursa(job #1416276)

Utilizator diac_paulPaul Diac diac_paul Data 7 aprilie 2015 19:49:40
Problema Paduri de multimi disjuncte Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>
#define NMax 100001
FILE *fin = fopen("disjoint.in", "rt");
FILE *fout = fopen("disjoint.out", "wt");

int n, m;
int cc[NMax];

void update(int x, int y) {
	int ccy = cc[y];
	for (int i = 1; i <= n; i++) {
		if (cc[i] == ccy) {
			cc[i] = cc[x];
		}
	}
}

int query(int x, int y) {
	return (cc[x] == cc[y]);
}

int main() {

	fscanf(fin, "%d %d", &n, &m);

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

	int t, x, y;
	while (m--) {
		fscanf(fin, "%d %d %d", &t, &x, &y);
		if (t == 1) {
			// update: reunesc multimile nodurilor x si y
			update(x, y);
		} else {
			// query: vreau sa stiu daca x si y sunt in aceeasi multime
			if (query(x, y) == 1) {
				fprintf(fout, "DA\n");
			} else {
				fprintf(fout, "NU\n");
			}
		}
	}

	fclose(fin);
	fclose(fout);
	return 0;
}