Cod sursa(job #1308745)

Utilizator japjappedulapPotra Vlad japjappedulap Data 4 ianuarie 2015 17:03:09
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
using namespace std;

ifstream is ("disjoint.in");
ofstream os ("disjoint.out");

int N, M;
int T[100001], S[100001];

int Root(int k);
void Unite(int a, int b);

int main()
{
    is >> N >> M;
    for (int i = 1; i <= N; ++i)
        T[i] = i, S[i] = 1;
    for (int i = 1, OP, a, b, x, y; i <= M; ++i)
    {
        is >> OP >> a >> b;
        if (OP == 2)
        {
            if (Root(a) == Root(b)) os << "DA\n";
            else os << "NU\n";
        }
        else
            Unite(Root(a), Root(b));
    }
    is.close();
    os.close();
}

int Root(int k)
{
    for (; T[k] != k; k = T[k]);
    return k;
};

void Unite(int a, int b)
{
    if (S[a] > S[b]) T[b] = a;
        else T[a] = b;
    if (S[a] == S[b])
        S[b]++;
};