Cod sursa(job #2469988)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 8 octombrie 2019 15:57:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include<iostream>
#include<fstream>
#include<algorithm>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, el, i, f[100002],c,a,b,j,auxa,auxb;

int calc(int nod)
{
    int aux=nod, a;
    while(f[nod]>0)
        nod=f[nod];
    while(f[aux]>0)
    {
        a=aux;
        aux=f[aux];
        f[a]=nod;
    }
    return nod;
}

int main(){
    fin>>el>>n;
    for(i=1;i<=el;i++)
        f[i]=-1;
    for(i=1;i<=n;i++)
    {
        fin>>c>>a>>b;
        auxa=calc(a);
        auxb=calc(b);
        if(c==1)
        {
            if(auxa!=auxb)
            {
                if(f[auxa]<f[auxb])
                {
                    f[auxa]+=f[auxb];
                    f[auxb]=auxa;
                }
                else
                {
                    f[auxb]+=f[auxa];
                    f[auxa]=auxb;
                }
            }
        }
        else
        {
            if(auxa==auxb)
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}