Cod sursa(job #2675894)

Utilizator lucian666Vasilut Lucian lucian666 Data 22 noiembrie 2020 19:23:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb


#include <iostream>
#include <fstream>
#include <vector>

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

int findNode(int node, vector<int>& T)
{
    if(node != T[node])
        return T[node] = findNode(T[node], T);

    return node;
}

void unire(int node1, int node2, vector<int>& T)
{
    int m1 = findNode(node1, T);
    int m2 = findNode(node2, T);
    T[m1] = m2;
}

int main()
{
    int n,m;
    in >> n >> m;
    vector<int> T(n + 2, 0);
    for(int i = 1; i<=n; ++i)
        T[i] = i;

    for(int op, node1, node2; m; --m)
    {
        in >> op >> node1 >> node2;
        if(op == 1)
        {
            unire(node1, node2, T);
        }
        else
        {
            if(findNode(node1, T) != findNode(node2, T))
                out << "NU";
            else
                out << "DA";

            out << '\n';
            //cout << findNode(node1,T) == findNode(node2, T) ? "DA" : "NU" << '\n';
        }
    }

    return 0;
}