Cod sursa(job #3292955)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 9 aprilie 2025 20:27:46
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <bits/stdc++.h>
#define VMAX 100005
#define INF 2147000000
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");

int rnk[VMAX];
int grupa[VMAX];

int find_parent(int nr)
{
    if(grupa[nr]==nr)
        return nr;
    return grupa[nr]=find_parent(grupa[nr]);
}

void union_find(int a, int b)
{
    a=find_parent(a);
    b=find_parent(b);

    if(rnk[a]<rnk[b])
        swap(a,b);

    if(rnk[a]==rnk[b])
    {
        rnk[a]++;
    }

    grupa[b]=a;
}

signed main()
{
    long long int n,m,i,j,k,t,q,nr,p;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        grupa[i]=i;
        rnk[i]=1;
    }

    while(m--)
    {
        fin>>i>>j>>k;
        if(i==1)
            union_find(j,k);
        else
        {
            if(find_parent(j)==find_parent(k))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }

    fin.close();
    fout.close();

    return 0;
}