Cod sursa(job #3154096)

Utilizator tonealexandruTone Alexandru tonealexandru Data 3 octombrie 2023 10:46:09
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

struct DSU
{
    int m;
    vector<int> parent,sizes;
    void init(int n, int a[])
    {
        parent.resize(n+1);
        sizes.resize(n+1);
        m=n;
        for(int i=1;i<=n;i++)
        {
            parent[i]=i;
            sizes[i]=1;
        }
    }

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

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

int main()
{
    DSU morbius;
    int n,m,x,y,cer;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        cin>>cer>>x>>y;
        if(cer==1)
            morbius.unite(x, y);
        else if(cer==2)
        {
            if(morbius.parent[x]==morbius.parent[y])
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
    }

    return 0;
}