Cod sursa(job #1942152)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 27 martie 2017 20:29:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <stdint.h>
#define nmax 100001
using namespace std;
fstream f1("disjoint.in", ios::in);
fstream f2("disjoint.out", ios::out);
int32_t n, m, t[nmax], siz[nmax];
int32_t Find(int32_t nod)
{
    int32_t i;
    i=nod;
    while(t[i]!=0) i=t[i];
    return i;
}
void Union(int32_t rx, int32_t ry)
{
    if(siz[rx]>siz[ry]) {t[ry]=rx; siz[rx]+=siz[ry];}
    else {t[rx]=ry; siz[ry]+=siz[rx];}
}
int main()
{
    int32_t i, x, y, op, rx, ry;
    f1>>n>>m;
    for(i=1; i<=n; i++)
        siz[i]=1;
    for(i=1; i<=m; i++)
    {
        f1>>op>>x>>y;
        rx=Find(x);
        ry=Find(y);
        if(op==1)
        {
            if(rx!=ry) Union(rx, ry);
        }
        else
        {
            if(rx==ry) f2<<"DA"<<"\n";
            else f2<<"NU"<<"\n";
        }
    }

    return 0;
}