Cod sursa(job #2122569)

Utilizator andr3i_kaabAndrei Ciineanu andr3i_kaab Data 5 februarie 2018 11:54:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n, m, c, a[100005], s1, s2, dads[100005], h[100005];

int main()
{
    int i, x, y;
    f>>n>>m;
    for (i=1; i<=n; i++)
    {
        a[i]=i;
        h[i]=1;
    }

    for (i=1; i<=m; i++)
    {
        f>>c>>x>>y;
        if (c==1)
        {
            /*s1=min(a[x], a[y]);
            s2=a[x]+a[y]-s1;
            for (j=1; j<=n; j++)
               if (a[j]==s2) a[j]=s1;*/
             int aux=x, ax;
             while (dads[x]!=0) x=dads[x];
             while (dads[aux]!=0)
             {
                 ax=aux;
                 aux=dads[aux];
                 dads[ax]=x;
             }
             aux=y;
             while (dads[y]!=0) y=dads[y];
             {
                 ax=aux;
                 aux=dads[aux];
                 dads[ax]=y;
             }
             if (h[x]<h[y])
             {
                 dads[x]=y;
             }
             else
             {
                 if (h[x]==h[y]) h[y]++;
                 dads[y]=x;
             }
        }
        else
        {
            while (dads[x]!=0) x=dads[x];
            while (dads[y]!=0) y=dads[y];
            if (x==y) g<<"DA"<<"\n";
            else g<<"NU"<<"\n";
        }
    }
    return 0;
}