Cod sursa(job #3176817)

Utilizator AlexandruDrg23Draghici Alexandru AlexandruDrg23 Data 27 noiembrie 2023 20:16:05
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <vector>
#include <fstream>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
vector<int> rng;
vector<int>par;
int n,m;

int fi(int nod)
{
    if(par[nod]==nod)
        return nod;
    par[nod]=fi(par[nod]);
    return par[nod];
}




int main()
{
    fin>>n>>m;
    par.resize(n+1);
    rng.resize(n+1,1);
    for(int k=1;k<=n;k++)
        par[k]=k;
    int cer,x1,x2;
    for(int k=1;k<=m;k++)
    {
        fin>>cer>>x1>>x2;
        if(cer==2)
            fout<<(fi(x1)==fi(x2)?"DA":"NU")<<'\n';
        else
        {
            if(rng[x1]<rng[x2])
                par[fi(x1)]=fi(x2);
            else
            {
                par[fi(x2)]=fi(x1);
                rng[par[x2]]++;
            }
        }
    }
    return 0;
}