Cod sursa(job #1747382)

Utilizator FredyLup Lucia Fredy Data 24 august 2016 20:40:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

#define lim 100001
int n,m,arb[lim],nr[lim];


int find(int x)
{
    if(x==arb[x])
        return x;
    return find(arb[x]);
}


int main()
{
    int i,a,ca,cb,b,tip;
    fin>>n>>m;

    for(i=1; i<=n; i++)
        arb[i]=i, nr[i]=1;

    for(i=1; i<=m; i++)
    {
        fin>>tip;

        ///prima cerinta
        if(tip==1)
        {
            fin>>a>>b;
            ca=find(a);
            cb=find(b);

            if(ca==cb) ;
            else
                if(nr[ca]<=nr[cb])
                {
                    nr[cb]+=nr[ca];
                    arb[ca]=cb;
                }
                else
                {
                    nr[ca]+=nr[cb];
                    arb[cb]=ca;
                }
        }

        /// a doua cerinta
        if(tip==2)
        {
            fin>>a>>b;
            ca=find(a);
            cb=find(b);

            if(ca==cb)
                fout<<"DA"<<'\n';
            else
                fout<<"NU"<<'\n';
        }

    }


    fin.close();
    fout.close();
    return 0;
}