Cod sursa(job #2945219)

Utilizator adamemi02emanuel adam adamemi02 Data 23 noiembrie 2022 16:44:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;

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

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

int main() {
    cin>>n>>m;
    multimi.resize(n+1, {0,1});
    for(int i = 0; i < m; i++){
        int cod,x,y;
        cin>>cod>>x>>y;
        if(cod== 1){
            uniune(x,y);
        }
        else{
            if(radacina(x) == radacina(y)) cout<<"DA"<<"\n";
            else cout<<"NU"<<"\n";
        }
    }
}