Cod sursa(job #2704780)

Utilizator georgipGeorgiana Petricele georgip Data 11 februarie 2021 11:32:58
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,i,j,tata[100005],rang[100005];
int gaseste(int x)
{
    if(tata[x]!=x)
        tata[x]=gaseste(tata[x]);
    return tata[x];
}
void unire(int rx,int ry)
{
    if(rang[rx]>rang[ry])
        {
            rang[rx]+=rang[ry];
            tata[ry]=rx;
        }
    else
        {
            rang[ry]+=rang[rx];
            tata[rx]=ry;
        }
}
int main()
{
    int tip,x,y,rad1,rad2;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        tata[i]=i;
        rang[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        fin>>tip>>x>>y;
        if(tip==1)
        {
            rad1=gaseste(x);
            rad2=gaseste(y);
            if(rad1!=rad2)
                unire(rad1,rad2);
        }
        else
            {
                if(gaseste(x)==gaseste(y))
                    fout<<"DA"<<'\n';
                else
                    fout<<"NU"<<'\n';
            }
    }
    return 0;
}