Cod sursa(job #2684589)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 14 decembrie 2020 10:34:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>

#define maxv 100005

std::ifstream fin("disjoint.in");
std::ofstream fout("disjoint.out");

int parent[maxv];
int rank[maxv];

void addSet(int node){
    parent[node] = node;
}

int findRoot(int node){
    if(parent[node] == node)
        return node;
    return findRoot(parent[node]);
}

void unionSets(int node1, int node2){
    node1 = findRoot(node1);
    node2 = findRoot(node2);

    if(node1 == node2) return;

    parent[node2] = node1;
}


void readInput(){
    int V, Q, type, node1, node2;
    fin >> V >> Q;
    for(int i=1; i<=V; i++)
        addSet(i);
    while(Q --){
        fin >> type >> node1 >> node2;
        if(type == 1)
            unionSets(node1, node2);
        else{
            if(findRoot(node1) == findRoot(node2)) fout << "DA\n";
            else fout << "NU\n";
        }
    }
}


int main(){
    readInput();
    return 0;
}