Cod sursa(job #2549198)

Utilizator BluThund3rRadu George BluThund3r Data 17 februarie 2020 13:51:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <vector>
using namespace std;

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

vector <int> parent, deg;
int n, m;

int root(int node)
{
    if(parent[node] == 0)
        return node;

    else
    {
        int uppernode = root(parent[node]);
        parent[node] = uppernode;
        return uppernode;
    }
}

void unite(int x, int y)
{
    int rx = root(x), ry = root(y);

    if(deg[rx] < deg[ry])
        parent[rx] = ry;

    else
        parent[ry] = rx;

    if(deg[rx] == deg[ry])
        ++ deg[ry];
}

int main()
{
    in >> n >> m;
    parent = vector <int> (n + 1, 0);
    deg = vector <int> (n + 1, 1);

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

        if(op == 2)
            (root(x) == root(y))? out << "DA\n" : out << "NU\n";

        else
            unite(x, y);
    }

    return 0;
}