Cod sursa(job #1770200)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 3 octombrie 2016 21:14:56
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <cstdio>

using namespace std;

int n, m;
int parinti[100005];
int nr;

int gasireParinti(int x)
{
    if(parinti[x] == x)
    {
        return x;
    }
    else
    {
        nr++;
        return gasireParinti(parinti[x]);
    }
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

    int tmp1, tmp2, tmp3;

    scanf("%d %d", &n, &m);

    for(int i = 0; i < n; i++)
    {
        parinti[i] = i;
    }

    for(int i = 0; i < m; i++)
    {
        scanf("%d %d %d", &tmp1, &tmp2, &tmp3);

        if(tmp1 == 1)
        {
            nr = 0;
            int nr1, nr2;
            int nrx1, nrx2;

            nrx1 = gasireParinti(tmp2);
            nr1 = nr;

            nr = 0;

            nrx2 = gasireParinti(tmp3);
            nr2 = nr;

            if(nr1 > nr2)
            {
                parinti[nrx1] = gasireParinti(nrx2);
            }
            else
            {
                parinti[nrx2] = gasireParinti(nrx1);
            }


        }
        else
        {
            if(gasireParinti(tmp2) == gasireParinti(tmp3))
            {
                printf("DA\n");
            }
            else
            {
                printf("NU\n");
            }
        }
    }



    return 0;
}