Cod sursa(job #3124229)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 27 aprilie 2023 12:24:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int NMAX = 1e5;
int n, m;
vector<int> T(NMAX + 1, -1);

int GetRoot(int Node)
{
    int Root = 0, aux = 0;
    while(T[Node] > 0)
        Node = T[Node];

    Root = Node;
    while(Node != Root)
    {
        aux = T[Node];
        T[Node] = Root;
        Node = aux;
    }
    return Root;
}

void Join(int x, int y)
{
    int RootX = GetRoot(x);
    int RootY = GetRoot(y);

    if(T[RootX] <= T[RootY])
    {
        T[RootX] += T[RootY];
        T[RootY] = RootX;
    }
    else
    {
        T[RootY] += T[RootX];
        T[RootX] = RootY;      
    }
}

int main()
{
    cin >> n >> m;
    while(m--)
    {
        int tip, x, y;
        cin >> tip >> x >> y;
        
        if(tip == 1)
            Join(x, y);
        else
            cout << (GetRoot(x) == GetRoot(y) ? "DA" : "NU") << '\n';
    }

    return 0;
}