Cod sursa(job #3003627)

Utilizator AndreiStreheStreche Andrei Claudiu AndreiStrehe Data 15 martie 2023 20:28:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;

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

#define nmax 100001
int tata[nmax],m[nmax];
int n,q,i,tip,nod1,nod2,x1,x2;


int rad(int x)
{
    if(tata[x]==0)
        return x;
    else
    {
        int r=rad(tata[x]);
        tata[x]=r;
        return r;
    }
}

int main()
{
    f>>n>>q;

    for(i=1;i<=q;i++)
    {
        f>>tip>>nod1>>nod2;

        if(tip==1)
        {
            x1=nod1; x2=nod2;
            x1=rad(nod1);
            x2=rad(nod2);

            if(m[x1]>m[x2])
                tata[x2]=x1;
            else if(m[x2]>m[x1])
                tata[x1]=x2;
            else
            {
                tata[x1]=x2;
                m[x1]+=1;
            }

        }
        else
        {
            x1=nod1; x2=nod2;
            x1=rad(nod1);
            x2=rad(nod2);
            if(x1==x2)
                g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }


    return 0;
}