Cod sursa(job #2696217)

Utilizator Mihai_EduardMihai Eduard Mihai_Eduard Data 15 ianuarie 2021 16:07:05
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>

#define N 100002

using namespace std;

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

int n, m, tip, a, b;
vector <int> P;

int radacina(int nod)
{
    int rad=nod, aux;
    while(P[rad]!=rad)
        rad=P[rad];
    while(nod!=rad)
    {
        aux=P[nod];
        P[nod]=rad;
        nod=aux;
    }
    return rad;
}

void unire(int nod1, int nod2)
{
    P[P[nod2]]=P[nod1];
}

int main()
{
    fin>>n>>m;
    for(int i=0;i<=n;i++)
        P.push_back(i);

    for(int i=1;i<=m;i++)
    {
        fin>>tip;
        fin>>a>>b;
        if(tip==1)
        {
            if(radacina(a)!=radacina(b))
                unire(a,b);
        }
        else
        {
            if(radacina(a)==radacina(b))
                fout<<"DA"<<'\n';
            else
                fout<<"NU"<<'\n';
        }
    }
    fin.close();
    fout.close();
    return 0;
}