Cod sursa(job #1705462)

Utilizator elena.marinicaMarinica Elena-Georgiana elena.marinica Data 20 mai 2016 17:20:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <stdio.h>
 
int get_root(int node, int p[]) {
	
	while (node != p[node]) {
		node = p[node];
	}
	return node;
} 

int main() {
	
	FILE *fin = fopen("disjoint.in", "r");
  	FILE *fout = fopen("disjoint.out", "w");
  	
  	int n, m, op, x, y;
  	
  	fscanf(fin, "%d %d", &n, &m);
  	
  	int parent[n + 1];
  	for (int i = 1; i <= n; i++) {
  		parent[i] = i;
  	}
  	
  	for (int i = 0; i < m; i++) {
  		fscanf(fin, "%d %d %d", &op, &x, &y);
  		if (op == 1) {
  			parent[get_root(y, parent)] = get_root(x, parent);
  		}
  		else if (op == 2) {
  			if (get_root(x, parent) == get_root(y, parent)) {
  				fprintf(fout, "DA\n");
  			}
  			else {
  				fprintf(fout, "NU\n");
  			}
  		}
  	}
  	fclose(fin);
  	fclose(fout);
}