Cod sursa(job #2809664)

Utilizator pizzandreeaCiurescu Andreea pizzandreea Data 27 noiembrie 2021 12:40:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>

#define MAX 100001

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



class Graf{
    public:
    //date membre
        vector <pair<pair<int, int>, int> > A;
        //nr noduri
        int mN;
        vector<int> parent;


        //constructor

        Graf(int N){
            mN = N;
            parent.resize(N+1);
            for(int i = 1; i <= N; i++)
                parent[i] = i;
        }

        void CitireG(int M);

        int Find(int x);
        void Union(int x, int y);

};


void Graf:: CitireG(int M){

    int x,y,op;

    for(int i = 0; i < M; i++){

        fin >> op >> x >> y;
        if(op == 1){
            Union(x,y);
        }
        else
            if(Find(x) == Find(y))
                fout << "DA\n";
            else
                fout << "NU\n";
    }
}

int Graf :: Find(int x){
    //daca nu mai gasim tata pentru nodul curent
    if( x == parent[x])
        return x;

    //mergem din tata in tata pana gasim nodul de start
    //si le punem tuturor acelasi tata
    parent[x] = Find(parent[x]);
    return parent[x];
}

void Graf :: Union (int x, int y){
    //gasim radacina/stramosul fiecarei componente pe care vrem sa le unim
    int px = Find(x);
    int py = Find(y);

   parent[px] = py;

}




int main(){
    int N, M;
    fin >> N >> M;
    Graf G(N);
    G.CitireG(M);


    return 0;
}