Cod sursa(job #3128668)

Utilizator Horia_haivasHaivas Horia Horia_haivas Data 10 mai 2023 12:35:51
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

int card[100001];
int root[100001];

void unite(int x, int y)
{
    if (card[x]>card[y])
        swap(x,y);
    root[x]=root[y];
    card[y]+=card[x];
}

int searchset(int x)
{
    if (root[x]==x)
        return x;
    root[x]=searchset(root[x]);
    return root[x];
}

int main()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    int n,m,i,type,a,b;
    fin >> n >> m;
    for (i=1;i<=n;i++)
    {
        card[i]=1;
        root[i]=i;
    }
    for (i=1;i<=m;i++)
    {
        fin >> type >> a >> b;
        if (type==1)
        {
            if (searchset(a)!=searchset(b))
            unite(a,b);
        }
        else
        {
            if (searchset(a)==searchset(b))
                fout << "DA\n";
            else
                fout << "NU\n";
        }
    }
    return 0;
}