Cod sursa(job #2935397)

Utilizator PatrascuAdrian1Patrascu Adrian Octavian PatrascuAdrian1 Data 6 noiembrie 2022 17:37:53
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 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] <= -1)
            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(x > y)
            swap(x,y);
        uf[x] += uf[y];
        uf[y] = x;
    }
};

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 != -1)
                out << "DA\n";
            else
                out << "NU\n";
        }
    }
    return 0;
}