Cod sursa(job #2936089)

Utilizator Samoila_AlexandruSamoilaAlexandru Samoila_Alexandru Data 7 noiembrie 2022 23:48:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

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

const int dim=1e5+1;

int n, m, op, x, y, t[dim];

int radacina(int k)
{
    int r=k;

    while(t[r]!=r)
        r=t[r];

    while(t[k]!=r)
    {
        int aux=t[k];
        t[k]=r;
        k=aux;
    }

    return r;
}

void unire(int k, int p)
{
    int rk=radacina(k), rp=radacina(p);

    if(rk!=rp)
        t[rp]=rk;
}

void verificare(int k, int p)
{
    if(radacina(k)!=radacina(p))
        fout<<"NU"<<'\n';
    else fout<<"DA"<<'\n';
}

int main()
{
    fin>>n>>m;

    for(int i=1; i<=n; i++)
        t[i]=i;

    for(int i=1; i<=m; i++)
    {
        fin>>op>>x>>y;
        if(op==1)
            unire(x, y);
        else verificare(x, y);
    }

    fout.close();
    return 0;
}