Cod sursa(job #2773607)

Utilizator raulandreipopRaul-Andrei Pop raulandreipop Data 7 septembrie 2021 21:53:16
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

struct DSU {
    int N; //nr of nodes
    vector<int> prt; //parents
    
    void initialize(int n)
    {
        N = n;
        prt.resize(N + 1);
        for (int i = 1; i <= n; i++)
        {
            prt[i] = i;
        }
    }
    int find (int u)
    {
        if (u == prt[u])
        {
            return u; 
        }
        return prt[u] = find (prt[u]);
    }
    void unite (int u, int v)
    {
        u = find(u);
        v = find(v);
        if (u != v)
        {
            prt[v] = u;
        }
        
    }
};

int main ()
{
    int n, m;
    in >> n >> m;
    struct DSU dsu;
    dsu.initialize(n);
    for (int i = 1; i <= m; i ++)
    {
        int q, x, y;
        in >> q >> x >> y;
        if (q == 1)
        {
            dsu.unite (x, y);
        }
        if (q == 2)
        {
            if (dsu.find(x) == dsu.find(y))
                out << "DA\n";
            else out << "NU\n";
        }
    }

}