Cod sursa(job #3271821)

Utilizator Silviu643Dumitrescu Silviu Florian Silviu643 Data 27 ianuarie 2025 14:24:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

fstream in("disjoint.in");
ofstream out("disjoint.out");

int t[100001],r[100001];
int n,m,p;

int rad(int nod)
{
    if (nod != t[nod])
    {
        int rad1 = rad(t[nod]);
        t[nod] = rad1;
        return rad1;
    }
    return nod;
}

void prn(int a, int b)
{
    if (r[a]>r[b])
        t[a]=b;
    else if (r[a]<r[b])
        t[b]=a;
    else
    {
        t[b]=a;
        r[a]++;
    }
}

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

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

    for (int i=1;i<=m;i++)
    {
        int a,b;
        in>>p>>a>>b;
        if (p==1) prn(rad(a),rad(b));
        else if (rad(a) == rad(b))
                    out<<"DA"<<'\n';
                else out<<"NU"<<'\n';
    }

    return 0;
}