Cod sursa(job #2802404)

Utilizator OrzataAndreiOrzata Andrei OrzataAndrei Data 18 noiembrie 2021 01:14:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int GR[100001], h[100001],N,M;
int group(int i)
{

    int ANS = i;
    while(GR[ANS]!=ANS)
    {
        ANS=GR[ANS];
    }


    while(GR[i]!=i)
    {
        int aux = GR[i];
        GR[i]= ANS;
        i=aux;
    }
    return ANS;

}
void Union(int i, int j)
{
    if(h[i]>h[j])
        GR[j]=i;
    else
    {
        GR[i]=j;
        if(h[i]==h[j])
            h[j]++;
    }
}

int main()
{
    in>>N>>M;
    for(int i=1; i<=N; i++)
    {
        GR[i]=i;
        h[i]=1;
    }
    while(M)
    {
        int op,x,y;
        in>>op>>x>>y;
        if(op==2)
        {
            if(group(x)==group(y))
                out<<"DA";
            else
                out<<"NU";
            out<<"\n";

        }
        else
            Union(group(x),group(y));
        M--;
    }
    return 0;

}