Cod sursa(job #3240671)

Utilizator PitigoiOlteanEmanuelPitigoi Oltean Emanuel PitigoiOlteanEmanuel Data 19 august 2024 16:12:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <iomanip>

using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
 int tata[100001];
 int marimi[100001];

 int findtata(int o )
 {
     if(tata[o]==o)
     {

         return o;
     }
     else
     {
         int rez=findtata(tata[o]);

         tata[o]=rez;
         return rez;
     }

 }

 int dsu(int x,int y)
 {
       x=findtata(x);
     y=findtata(y);
     if(x==y)
     {


         return 0;
     }

     if(marimi[x]>marimi[y])
     {
         tata[y]=tata[x];
         marimi[x]+=marimi[y];
         marimi[y]=0;
     }
     else
     {
         tata[x]=tata[y];
         marimi[y]+=marimi[x];
         marimi[x]=0;
     }

     return 0;

 }

int main()
{

    int n,m;
    cin>>m>>n;
    for(int i=0;i<=m;i++)
    {
        marimi[i]=1;
        tata[i]=i;
    }


    for(int i=1;i<=n;i++)
    {

        int a,b,x;
        cin>>x>>a>>b;
        if(x==1)
        {
              dsu(a,b);
        }
        else
        {
            int c=findtata(a);
            int d=findtata(b);
            if(c==d)
            {
                cout<<"DA"<<'\n';
            }
            else
            {
                cout<<"NU"<<'\n';
            }
        }



    }



    return 0;
}