Cod sursa(job #2564149)

Utilizator CarlaDianaCarla Diana CarlaDiana Data 1 martie 2020 18:34:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n,m,nrnod[100010],vtata[100010],c,a,b,tata1,tata2;

int tata(int nod)
{
    while(vtata[nod]!=nod)
    {
        nod=vtata[nod];
    }
    return nod;
}
void ret(int nod,int val)
{
    if(vtata[nod]!=val)
    {
        vtata[nod]=val;
        ret(vtata[nod],val);
    }
}


int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        nrnod[i]=1;
        vtata[i]=i;
    }

    for(;m;m--)
    {
        fin>>c>>a>>b;
        if(c==1)
        {
            tata1=tata(a);
            tata2=tata(b);
            if(nrnod[tata1]>nrnod[tata2])
            {
                vtata[tata2]=tata1;
                nrnod[tata1]+=nrnod[tata2];
            }
            else
            {
                vtata[tata1]=tata2;
                nrnod[tata2]+=nrnod[tata1];
            }
        }
        else
        {
            tata1=tata(a);
            tata2=tata(b);
            if(tata1==tata2)
                fout<<"DA"<<'\n';
            else
                fout<<"NU"<<'\n';
            ret(a,tata1);
            ret(b,tata2);
        }
    }
    return 0;
}