Cod sursa(job #2794392)

Utilizator realmeabefirhuja petru realmeabefir Data 4 noiembrie 2021 19:45:46
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
int parinte[100001];

int get_parent(int x)
{
    while (parinte[x] != 0)
    {
        x = parinte[x];
    }
    return x;
}

pair<int, int> get_parent_and_depth(int x)
{
    int h = 0;
    while (parinte[x] != 0)
    {
        h++;
        x = parinte[x];
    }
    return {x,h};
}

int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; i++)
        parinte[i] = 0;
    for (int i = 1; i <= m; i++)
    {
        int o,x,y;
        f >> o >> x >> y;

        if (o == 1)
        {
            pair<int,int> x_info = get_parent_and_depth(x);
            pair<int,int> y_info = get_parent_and_depth(y);
            int parinte_x = x_info.first;
            int parinte_y = y_info.first;
            int height_x = x_info.second;
            int height_y = y_info.second;

            // garanteaza ca nu se va intampla
            // if (parinte_x == parinte_y)

            if (height_x > height_y)
                parinte[parinte_y] = parinte_x;
            else
                parinte[parinte_x] = parinte_y;
        }
        else
        {
            if (get_parent(x) == get_parent(y))
                g << "DA\n";
            else
                g << "NU\n";
        }
    }

    return 0;
}