Cod sursa(job #3141131)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 12 iulie 2023 17:13:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

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

int tata[100001], sz[100001];

int capetenie(int nod)
{
    if(tata[nod] == nod)
        return nod;
    return capetenie(tata[nod]);
}

int cnt;

void join(int a, int b)
{
    int ra = capetenie(a), rb = capetenie(b);
    if(ra == rb)
        return;
    cnt--;
    if(sz[rb] > sz[ra])
        swap(ra, rb);
    tata[rb] = ra;
    sz[ra] += sz[rb];
}

int main()
{
    int n, m, t, a, b;
    in >> n >> m;
    cnt = n;
    for(int i = 1; i <= n; i++)
    {
        tata[i] = i;
        sz[i] = 1;
    }
    for(int i = 1; i <= m; i++)
    {
        in >> t >> a >> b;
        if(t == 1)
            join(a, b);
        else
            out << (capetenie(a) == capetenie(b) ? "DA\n" : "NU\n");
    }
    return 0;
}