Cod sursa(job #2588893)

Utilizator tudorcioc5Cioc Tudor tudorcioc5 Data 25 martie 2020 16:09:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;


ifstream fin;
ofstream fout;

int task, number_of_tasks, n, i, j, k;

vector <int> parent (100001);

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

void union_of_partition (int left, int right){
    if (parent[left] == left)
        parent[left] = parent[right];

    else { 
        left  = parent[left];
        union_of_partition(left , right);
    }
}

int find_element(int element){
    if (parent[element] == element)
        return element;
    else {
        parent[element] = find_element(parent[element]);
        return parent[element];
    }
}


int main (void){
    fin.open("disjoint.in");
    fout.open("disjoint.out");
    fin>>n>>number_of_tasks;

    create_disjoint();

    for (i=1; i<=number_of_tasks; i++){
        fin>>task;

        switch (task)
        {
        case 1:
            fin>>j>>k;
            union_of_partition(j , k);
            break;
        
        case 2:
            fin>>j>>k;
            if (find_element(j) == find_element(k)) fout<<"DA\n";
            else fout<<"NU\n";
            break;
        }

    }

    fin.close();
    fout.close();

    return 0;
}