Cod sursa(job #3040219)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 29 martie 2023 15:40:05
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 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,rang[100005],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,rang[i]=1,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(rang[x]<=rang[y])
                {
                    tata[rx]=ry,nr[ry]+=nr[rx];
                    if(rang[x]==rang[y])
                        rang[y]++;
                    maxi=max(maxi,nr[ry]);
                }
                else
                {
                    tata[ry]=rx,nr[rx]+=nr[ry];
                    maxi=max(maxi,nr[rx]);
                }
            }
        }
        else if(op==2)
        {
            if(rx==ry)
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
        else if(op==3)
            cout<<maxi<<'\n';
    }

    return 0;
}