Cod sursa(job #3264349)

Utilizator Octa-pe-infoNechifor Octavian Octa-pe-info Data 20 decembrie 2024 17:19:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

vector<int>pr,nr;

int gaseste(int nod){

    if(pr[nod] == nod)
        return nod;

    return pr[nod] = gaseste(pr[nod]);
}

void uunion(int a,int b){

    a = gaseste(a);
    b = gaseste(b);

    if(a==b)
        return;

    if(nr[a] < nr[b])
        swap(a,b);

    nr[a] += nr[b];
    pr[b] = a;
}

int main()
{

    int n,m;

    fin>>n>>m;

    pr.resize(n+1);
    nr.resize(n+1);

    for(int i=1;i<=n;i++){

        pr[i]=i;
        nr[i]=1;
    }

    for(int i=1;i<=m;i++){

        int q,a,b;

        fin>>q>>a>>b;

        if(q == 1){
            uunion(a,b);
        }
        else{

            if(gaseste(a) == gaseste(b))
                fout<<"DA"<<'\n';
            else fout<<"NU"<<'\n';

        }

    }
    return 0;
}