Cod sursa(job #2397176)

Utilizator SternulStern Cristian Sternul Data 4 aprilie 2019 11:22:30
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

void uneste(int x, int y, int N, vector <int> &comp, vector < vector < int > > &rang){
    if(comp[x] == comp[y])
        return;
    int cmpy = comp[y];
    int cmpx = comp[x];
    if(rang[cmpx].size() < rang[cmpy].size()){
        for(int i = 0;i < rang[cmpx].size();i++){
            rang[cmpy].push_back(rang[cmpx][i]);
            comp[rang[cmpx][i]] = cmpy;
        }
    }
    else{

        for(int i = 0;i < rang[cmpy].size();i++){
            rang[cmpx].push_back(rang[cmpy][i]);
            comp[rang[cmpy][i]] = cmpx;
        }
    }
}


int main() {
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    int N, M, cod, x, y;
    f>>N>>M;
    vector < int > comp(N + 1);
    vector < vector < int > > rang(N + 1);
    for(int i = 1; i <= N;i++){
        comp[i] = i;
        rang[i].push_back(i);
    }
    while(M){
        f>>cod>>x>>y;
        if(cod == 1){
            uneste(x, y, N, comp, rang);
        }
        else {
            if (comp[x] == comp[y])
                g << "DA\n";
            else g << "NU\n";
        }
        M--;
    }



    return 0;
}