Cod sursa(job #1214440)

Utilizator pentrusandaPentru Sanda pentrusanda Data 30 iulie 2014 13:22:50
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

using namespace std;

int pmd[100005][2],n,m,cod,x,y,lista[100005];

int main()
{
    ifstream in ("disjoint.in");
    ofstream out ("disjoint.out");

    in>>n>>m;

    for (int i=1;i<=n;++i) pmd[i][0]=i,pmd[i][1]=1;

    for (int i=1;i<=m;++i)
    {
        in>>cod>>x>>y;

            int r1,r2;
            r1=x; lista[0]=0;
            while (pmd[r1][0]!=r1)
            {
                ++lista[0];
                lista[lista[0]]=r1;
                r1=pmd[r1][0];
            }
            for (int j=1;j<=lista[0];++j) pmd[lista[j]][0]=r1;

            r2=y; lista[0]=0;
            while (pmd[r2][0]!=r2)
            {
                ++lista[0];
                lista[lista[0]]=r2;
                r2=pmd[r2][0];
            }
            for (int j=1;j<=lista[0];++j) pmd[lista[j]][0]=r2;

            if (cod==1)
            {
                if (pmd[r1][1]>pmd[r2][1])
                {
                    pmd[r2][0]=r1;
                    pmd[r1][1]+=pmd[r2][1];
                }else
                {
                    pmd[r1][0]=r2;
                    pmd[r2][1]+=pmd[r1][1];
                }
            }else
            {
                if (r1==r2) out<<"DA\n";else out<<"NU\n";
            }

    }

    in.close();
    out.close();
    return 0;
}