Cod sursa(job #2750536)

Utilizator stefan.m.soare@gmail.comstefan soare [email protected] Data 11 mai 2021 19:55:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std;

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

int const MAX=1e5+1;
int tata[MAX],inaltime[MAX];
int n,m;


int get_king(int x)
{
    if(x == tata[x])
        return x;

    tata[x]=get_king(tata[x]);

    return tata[x];


}




int main() {

    fin>>n>>m;


    for(int i =1; i <= n; ++i)
        tata[i]=i;




    for(int i =1; i <= m; ++i)
    {
        int op,x,y;
        fin>>op>>x>>y;

        int a1=get_king(x);
        int a2=get_king(y);

        if(op == 1)
        {
            if(a1 != a2){

            if(inaltime[a1] > inaltime[a2])
            {
                tata[a2]=a1;

            }
            else
            if(inaltime[a2] > inaltime[a1])
            {
                tata[a1]=a2;
            }
            else
            {
                tata[a2]=a1;
                ++inaltime[a1];

            }
            }

        }
        else
        {
            if(a1 == a2)
                fout<<"DA"<<"\n";
            else
                fout<<"NU"<<"\n";


        }


    }







    return 0;
}