Cod sursa(job #3268534)

Utilizator Andrei_DumyDumitrescu Andrei-George Andrei_Dumy Data 15 ianuarie 2025 19:46:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;

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

int daddy[100001], sz[100001];

inline void init(const int& n)
{
    for(int i=1; i<=n; i++)
        daddy[i]=i, sz[i]=1;
}

int find(const int& tbf)
{
    if(daddy[tbf]==tbf)
        return tbf;
    return daddy[tbf]=find(daddy[tbf]);
}

void Union(int& x, int& y)
{
    x=find(x);
    y=find(y);

    if(x!=y)
    {
        if(sz[y]<sz[x])
            swap(x, y);
        daddy[x]=y;
        sz[x]+=sz[y];
    }
}

void op2(const int& x, const int& y)
{
    if(find(x)==find(y))
        cout<<"DA\n";
    else
        cout<<"NU\n";
}

int main()
{
    ios::sync_with_stdio(false);

    int n, m;
    cin>>n>>m;
    init(n);

    int op, x, y;
    for(int i=0; i<m; i++)
    {
        cin>>op>>x>>y;
        if(op==2)
            op2(x, y);
        else
            Union(x, y);
    }
    return 0;
}