Cod sursa(job #2283101)

Utilizator alex.carpCarp Alexandru alex.carp Data 14 noiembrie 2018 23:30:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tata[100008],rang[100008],n,m,p,x,y;
int radacina(int x)
{
    int r=x;
    while(tata[r]!=r)r=tata[r];
    while(tata[x]!=x)
    {
       int aux=x;
        x=tata[x];
        tata[aux]=r;
    }
    return r;
}
int main()
{f>>n>>m;
for(int i=1;i<=n;i++)
    {tata[i]=i;rang[i]=1;}
for(int i=1;i<=m;i++)
{
    f>>p>>x>>y;
    if(p==1)
    {
        int rx=radacina(x);
        int ry=radacina(y);
        if(rang[rx]>rang[ry])
            tata[ry]=rx;
        else tata[rx]=ry;
        if(rang[rx]==rang[ry])rang[ry]++;
    }
    else
    {
        int rx=radacina(x);
        int ry=radacina(y);
        if(rx==ry)
            g<<"DA"<<'\n';
        else g<<"NU"<<'\n';
    }
}
    return 0;
}