Cod sursa(job #2660597)

Utilizator RazvanucuPopan Razvan Calin Razvanucu Data 19 octombrie 2020 20:23:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int type,x,y,N,M;
int Parinte[100020],Range[100020];
int radacina(int I)
{
    int R=I,Y;
    while(R!=Parinte[R])
        R=Parinte[R];

    while(I!=Parinte[I])
    {
        Y=Parinte[I];
        Parinte[I]=R;
        I=Y;
    }

    return R;
}
void Unire(int I,int J)
{
    I=radacina(I);
    J=radacina(J);
    if(I!=J)
    {
        if(Range[I]<Range[J])
            Parinte[I]=J;
        else
            Parinte[J]=I;

        if(Range[I]==Range[J])
            Range[I]++;
    }
}
int main()
{
    f>>N>>M;

    for(int i=1; i<=N; i++)
    {
        Parinte[i]=i;
        Range[i]=1;
    }

    for(int q=0; q<M; q++)
    {
        f>>type>>x>>y;
        if(type==1)
        {
            if(radacina(x)!=radacina(y))
                Unire(x,y);
        }
        else
        {
            if(radacina(x)==radacina(y))
                g<<"DA\n";
            else
                g<<"NU\n";
        }
    }
    return 0;
}