Cod sursa(job #3267084)

Utilizator tomitamateyTomita Matei tomitamatey Data 11 ianuarie 2025 09:26:28
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 cin ("disjoint.in");
ofstream cout ("disjoint.out");
int n,m,x,y,t[100100],nr[100100],op;

int gasire (int z)
{
    int p;
    if (z==t[z]) return z;
    else
    {
    p=gasire(t[z]);
    t[z]=p;
    return p;
    }
}

void unire ()
{
    int a=gasire(x);
    int b=gasire(y);

    if (a==b) return ;

    if (nr[a]<nr[b])
    {
        nr[a]=nr[a]+nr[b];
        t[b]=a;
    }
    else
    {
        nr[b]=nr[a]+nr[b];
        t[a]=b;
    }
}

int main()
{
    cin>>n>>m;
    for (int i=1; i<=n; i++) t[i]=i;
    while (m)
    {
        m--;
        cin>>op>>x>>y;
        if (op==1) unire();
        else
        {
            if (gasire(x)==gasire(y)) cout<<"DA";
            else cout<<"NU";
            cout<<'\n';
        }

    }

    return 0;
}