Cod sursa(job #3150787)

Utilizator gargantuanRares Oprea gargantuan Data 18 septembrie 2023 15:15:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

using namespace std;

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

const int nmax = 2e5 + 7;
int parent[nmax], sizes[nmax];

int find(int x)
{
    if(x == parent[x])
        return x;
   return parent[x] = find(parent[x]);
}

void unite(int u,int v)
{
    u = find(u);
    v = find(v);
    if(u == v)
        return;
    if(sizes[u] > sizes[v])
        swap(u,v);
    parent[u] = v;
    sizes[v] += sizes[u];
    return;
}

int main()
{
    int n,i,q;
    cin >> n >> q;
    for(i=1;i<=n;i++)
    {
        sizes[i] = 1;
        parent[i] = i;
    }
    for(i=1;i<=q;i++)
    {
        int x,y,t;
        cin >> t >> x >> y;
        if(t == 1)
            unite(x, y);
        if(t == 2)
        {
            if(find(x) == find(y))
                cout << "DA";
            else
                cout << "NU";
            cout << endl;
        }
    }
    return 0;
}