Cod sursa(job #2741730)

Utilizator HardtoPronouncePetcu David-Andrei HardtoPronounce Data 18 aprilie 2021 13:02:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DIM=1e5+5;

int n,m,x,y,cer;
int tt[DIM],siz[DIM];

int find(int a)
{
    if (tt[a]==a)
        return a;
    return (tt[a]=find(tt[a]));
}

void unite(int a,int b)
{
    a=find(a);
    b=find(b);
    if (siz[a]<siz[b])
        swap(a,b);
    tt[b]=a;
    siz[a]+=siz[b];
}

int main()
{
    f >> n >> m;

    for (int i=1; i<=n; i++)
    {
        tt[i]=i;
        siz[i]=1;
    }
    for (int i = 1; i <= m; i++)
    {
        f >> cer >> x >> y;
        if (cer==1)
            unite(x,y);
        else
        {
            if (find(x)==find(y))
                g<<"DA"<<'\n';
            else
                g<<"NU"<<'\n';
        }
    }
        return 0;
    }