Cod sursa(job #2943495)

Utilizator Petrica81Simion Petrica Petrica81 Data 21 noiembrie 2022 01:21:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>

using namespace std;

ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m;
vector<pair<int,int>> multimi;

int radacina(int x){
    int aux = x;
    while(multimi[aux].first != 0) aux = multimi[aux].first;
    if(multimi[x].first != 0){
        multimi[x].first = aux;
        x = multimi[x].first;
    }
    return x;
}
void uniune(int x, int y){
    int radx = radacina(x), rady = radacina(y);
    if(multimi[radx].second > multimi[rady].second){
        multimi[radx].second += multimi[rady].second;
        multimi[rady].first = radx;
    }
    else{
        multimi[rady].second += multimi[radx].second;
        multimi[radx].first = rady;
    }
}

int main() {
    fin>>n>>m;
    multimi.resize(n+1, {0,1});
    for(int i = 1; i <= m; i++){
        int op,x,y;
        fin>>op>>x>>y;
        if(op == 1){
            uniune(x,y);
        }
        if(op == 2){
            if(radacina(x) == radacina(y)) fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    for(int i = 0; i < n; i++){
        cout<<multimi[i].first<<" ";
    }
    return 0;
}