Cod sursa(job #3272111)

Utilizator Codrut_NeagNeag Codrut Serban Codrut_Neag Data 28 ianuarie 2025 14:23:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>

using namespace std;

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

int t[100020], rang[100021];

int radacina(int x)
{
    if(t[x]!=0)
    {
        int k=radacina(t[x]);
        t[x]=k;
        return k;
    }
    else return x;
}

void unire(int x, int y)
{
    int rx=radacina(x), ry=radacina(y);
    if(rx!=ry)
    {
        if(rang[rx]>rang[ry])
            t[ry]=rx;
        else
        {
            t[rx]=ry;
            if(rang[x]==rang[y])
                rang[y]++;
        }
    }
}

int main()
{
    int x, y, n, m, p;
    in>>n>>m;
    for(int i=1; i<=m; i++)
    {
        in>>p>>x>>y;
        if(p==1)
            unire(x,y);
        else if(radacina(x)==radacina(y))
            out<<"DA"<<'\n';
        else out<<"NU"<<'\n';
    }
    return 0;
}