Cod sursa(job #2750375)

Utilizator stefan.m.soare@gmail.comstefan soare [email protected] Data 10 mai 2021 23:01:42
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 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[a1]=a2;
                ++inaltime[a2];

            }
            }

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


        }



    }







    return 0;
}