Cod sursa(job #3040224)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 29 martie 2023 15:54:32
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>

using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int tata[100005],n,i,x,y,op,cls,j,m,rx,ry,nr[100005],maxi;
int radacina(int x)
{
    while(tata[x]!=x)
    {
        x=tata[x];
    }
    return x;
}
int main()
{
    cin>>n>>m;
    for(i=1; i<=n; i++)
        tata[i]=i,nr[i]=1;
    for(i=1; i<=m; i++)
    {
        cin>>op;
        if(op<3)
        {
            cin>>x>>y;
            rx=radacina(x);
            ry=radacina(y);
        }
        if(op==1)
        {
            if(rx!=ry)
            {
               if(rx<ry)
               {
                   while(tata[y]!=y)
                   {
                       int aux=tata[y];
                       tata[y]=rx;
                       y=aux;
                   }
                   tata[y]=rx;
               }
               else
               {
                   while(tata[x]!=x)
               {
                   int aux=tata[x];
                   tata[x]=ry;
                   x=aux;
               }
               tata[x]=ry;
               }
            }
        }
        else if(op==2)
        {
            if(rx==ry)
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
        else if(op==3)
            cout<<maxi<<'\n';
    }

    return 0;
}