Cod sursa(job #2084324)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 8 decembrie 2017 22:34:58
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
const int nmax=100005;
int n,m,P[nmax],cod,x,y,tata_x,tata_y;
int radacina(int v)
{
    if(P[v]<0)
        return v;
    P[v]=radacina(P[v]);
    return P[v];
}

void reuniune(int x,int y)
{
    if(-P[x]>=-P[y])
    {
        P[x]+=P[y];
        P[y]=x;
    }
    else
    {
        P[y]+=P[x];
        P[x]=y;
    }
}

int main()
{
    fi>>n>>m;
    for(int i=1;i<=n;i++)
        P[i]=-1;
    for(int i=1;i<=m;i++)
    {
        fi>>cod>>x>>y;
        if(cod==1)
        {
            tata_x=radacina(x);
            tata_y=radacina(y);
            reuniune(x,y);
        }
        else
        {
            tata_x=radacina(x);
            tata_y=radacina(y);
            if(tata_x==tata_y)
                fo<<"DA\n";
            else
                fo<<"NU\n";
        }
    }
    fi.close();
    fo.close();
    return 0;
}