Cod sursa(job #3265057)

Utilizator adelinapetreAdelina Petre adelinapetre Data 26 decembrie 2024 17:54:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#pragma GCC optimize ("O4,Ofast")
#pragma GCC optimize ("unroll-loops")
#define int long long
using namespace std;

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

const int Nmax = 1e5 + 5;

int parent[Nmax], sz[Nmax];
int n;

void init()
{
    for(int i = 0; i <= n; i ++)
    {
        parent[i] = i;
        sz[i] = 1;
    }
}

int findd(int nod)
{
    if(nod == parent[nod])
        return nod;
    return parent[nod] = findd(parent[nod]);
}

void unite(int u, int v)
{
    u = findd(u); v = findd(v);
    if(u == v)
        return;
    if (sz[u] < sz[v])
        swap(u, v);
    sz[u] += sz[v];
    parent[v] = u;
}

signed main()
{
    int m, i, tip, u, v;
    cin >> n >> m;
    init();
    for(i =  1; i <= m; i ++)
    {
        cin >> tip >> u >> v;
        if(tip == 1)
            unite(u, v);
        else
            cout << (findd(u) == findd(v) ? "DA\n" : "NU\n");
    }
    return 0;
}