Cod sursa(job #2525970)

Utilizator casuneanu.stefanstefan casuneanu casuneanu.stefan Data 18 ianuarie 2020 09:50:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define NMAX 100002

using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");

int tata[NMAX];

int Find(int x);

void Union(int x, int y);

int n, m, i, c, x, y, h[NMAX];
int main()
{
    fin>>n>>m;
    for (i=1; i<=m; i++)
    {
        fin>>c>>x>>y;
        if (c==1)
            Union(x, y);
        else
        {
            if (Find(x)!=Find(y))
                fout<<"NU"<<'\n';
            else
                fout<<"DA"<<'\n';
        }
    }
    return 0;
}
int Find(int x)
{
    int rad, y;
    rad=x;
    while (tata[rad]!=0)
        rad=tata[rad];

    while (tata[x])
    {
        y=tata[x];
        tata[x]=rad;
        x=y;
    }
    return rad;
}

void Union(int x, int y)
{
    int rx=Find(x);
    int ry=Find(y);
    if (h[rx] > h[ry])
        tata[ry]=rx;
    else
    {
        tata[rx]=ry;
        if (h[rx]==h[ry])
            h[ry]++;
    }
}