Cod sursa(job #2935403)

Utilizator PatrascuAdrian1Patrascu Adrian Octavian PatrascuAdrian1 Data 6 noiembrie 2022 18:04:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

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

class DSU
{
    vector<int> uf;
public:
    DSU(int N = 0)
    {
        uf.assign(N, -1);
    }
    int Find(int node)
    {
        if(uf[node] < 0)
            return node;
        else return (uf[node] = Find(uf[node]));
    }
    void Union_elem(int x, int y)
    {
        int T1 = Find(x);
        int T2 = Find(y);
        if(T1 == T2)
            return;
        if(uf[T1] > uf[T2])
           swap(T1,T2);
        uf[T1] += uf[T2];
        uf[T2] = T1;
    }
};

int main()
{
    int N, M;
    in >> N >> M;
    DSU S(N + 1);
    while(M--)
    {
        int c, x, y;
        in >> c >> x >> y;
        if(c == 1)
        {
            S.Union_elem(x,y);
        }
        else
        {
            int Tx = S.Find(x);
            int Ty = S.Find(y);
            if(Tx == Ty && Tx > 0)
                out << "DA\n";
            else
                out << "NU\n";
        }
    }
    return 0;
}