Cod sursa(job #1540212)

Utilizator fromzerotoheroFROM ZERO fromzerotohero Data 2 decembrie 2015 13:51:02
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

#define nmax 100001

ifstream fi("disjoint.in");
ofstream fo("disjoint.out");

int n, m;
int op, x, y;
int T[nmax], Nr[nmax];

int root(int nod)
{
    if (nod = T[nod])
        return nod;
    return root(T[nod]);
}

int main()
{

    fi >> n >> m;

    // initialize

    for (int i = 1; i <= n; i++)
        T[i] = i, Nr[i] = 1;

    for (int i = 1; i <= m; i++)
    {
        fi >> op >> x >> y;

        int tX = root(x);
        int tY = root(y);

        if (op == 1)
        {
            // reuniune de multimi

            if (Nr[tX] >= Nr[tY])
            {
                Nr[tX] += Nr[tY];
                T[tY] = tX;
            }
            else
            {
                Nr[tY] += Nr[tX];
                T[tX] = tY;
            }
        }
        else
        {
            // query
            if (tX == tY)
                fo << "DA\n";
            else
                fo << "NU\n";
        }

    }

    fi.close();
    fo.close();

    return 0;
}