Cod sursa(job #2807321)

Utilizator iustin.pericicaPericica Iustin iustin.pericica Data 23 noiembrie 2021 17:39:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include    <iostream>
#include    <fstream>
#include    <queue>
#include    <vector>

#define NMAXIM 100001


using namespace std;

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

int n, m;
int tati[NMAXIM], contor[NMAXIM];

int getRoot(int x){

    if(x != tati[x]){
            tati[x] = getRoot(tati[x]);
            return tati[x];
    }
    return x;

}

int main()
{
    fin>>n>>m;
    for(int i = 1;i<=n;++i){
        tati[i] = i;
        contor[i] = 1;
    }

    for(int i = 1;i<=m;++i){
        int task, x, y;
        fin>>task>>x>>y;
        int rootX = getRoot(x);
        int rootY = getRoot(y);
        if(task == 1){
            if(rootX != rootY){
                if(contor[rootX] <= contor[rootY]){
                    contor[rootY] += contor[rootX];
                    tati[rootX] = rootY;
                }
                else{
                    contor[rootX]+=contor[rootY];
                    tati[rootY] = rootX;
                }
            }
        }
        else{
            if(rootX == rootY){
                fout<<"DA \n";
            }
            else fout<<"NU \n";
        }
    }

    return 0;
}