Cod sursa(job #1551551)

Utilizator AnesthesicChereches Sergiu Alexandru Anesthesic Data 16 decembrie 2015 00:01:28
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;

void print_data (int x, int y){
    ofstream fout ("disjoint.out");
    if (x == y)
        fout << "DA\n";
    else
        fout << "NU\n";
}

void quick_union (int x, int y, int v[]){
    if (v[x] < v[y]){
        v[x] += v[y];
        v[y] = x;
    }
    else{
        v[y] += v[x];
        v[x] = y;
    }
}

int find_root (int x, int v[]){
    if (v[x] < 0)
        return x;
    return v[x] = find_root (v[x], v);
}

void get_data (int &n, int v[]){
    int m, x, y, op;
    for (int i = 0; i <= n; i++)
        v[i] = -1;
    ifstream fin ("disjoint.in");
    fin >> n >> m;
    for (int i = 1; i <= m; i++){
        fin >> op >> x >> y;
        int root_x = find_root (x, v);
        int root_y = find_root (y, v);
        if (op == 1)
            quick_union (root_x, root_y, v);
        else
            print_data (root_x, root_y);
    }
}
int main(){
    int n;
    int v[nmax];
    get_data (n, v);
    return 0;
}