Cod sursa(job #2439191)

Utilizator StanCatalinStanCatalin StanCatalin Data 15 iulie 2019 13:01:46
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

const int dim = 100005;

int r[dim],n,m,adancime[dim],op;

int Find(int x)
{
    if (x == r[x])
    {
        return x;
    }
    r[x] = Find(r[x]);
    return r[x];
}

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

int main()
{
    int x,y,rx,ry;
    in >> n >> m;
    for (int i=1; i<=n; i++)
    {
        r[i] = i;
        adancime[i] = 1;
    }
    for (int i=1; i<=m; i++)
    {
        in >> op >> x >> y;
        if (op == 1)
        {
            Union(x,y);
        }
        else
        {
            rx = Find(x);
            ry = Find(y);
            if (rx == ry)
            {
                out << "DA\n";
            }
            else out << "NU\n";
        }
    }
    return 0;
}