Cod sursa(job #2689401)

Utilizator lauratenderLaura Tender lauratender Data 20 decembrie 2020 17:11:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

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

const int MAXN = 100000;
int t[MAXN + 1], h[MAXN + 1];

int find_root(int x)
{
    if(t[x] == x)
        return x;
    return find_root(t[x]);
}

void uneste(int x, int y)
{
    int r_x = find_root(x), r_y = find_root(y);

    if(h[r_x] < h[r_y])
    {
        t[r_x] = r_y;
        h[r_y] ++;
    }
    else
    {
        t[r_y] = r_x;
        h[r_x] ++;
    }

}
void verifica(int x, int y)
{
    if (find_root(x) == find_root(y))
        out << "DA\n";
    else
        out << "NU\n";
}
int main()
{
    int n, m;
    in >> n >> m;

    for(int i = 1; i <= n; ++i)
    {
        t[i] = i;
        h[i] = 1;
    }

    for(int i = 0; i < m; ++i)
    {
        int op, x, y;
        in >> op >> x >> y;

        if (op == 1)
            uneste(x,y);
        else
            verifica(x,y);
    }
}