Cod sursa(job #3174574)

Utilizator Mihai_999Diaconeasa Mihai Mihai_999 Data 24 noiembrie 2023 22:17:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#define nl '\n'

using namespace std;

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

const int NMAX = 1e5+1;
int n, q;
int sz[NMAX], tata[NMAX];

int findd(int nod)
{
    if (nod == tata[nod])
        return nod;
    return tata[nod] = findd(tata[nod]);
}
void unite(int u, int v)
{
    u = findd(u);
    v = findd(v);
    if (u != v)
    {
        if (sz[u] < sz[v])
            swap(u, v);
        tata[v] = u;
        sz[u] += sz[v];
    }
    return;
}
bool sameSet(int u, int v)
{
    u = findd(u);
    v = findd(v);
    return (u == v);
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    fin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        sz[i] = 1;
        tata[i] = i;
    }
    while (q--)
    {
        int p, u, v;
        fin >> p >> u >> v;
        if (p == 1)
            unite(u, v);
        else
        {
            bool flag = sameSet(u, v);
            if (flag)
                fout << "DA";
            else
                fout << "NU";
            fout << nl;
        }
    }
    return 0;
}