Cod sursa(job #1375905)

Utilizator darrenRares Buhai darren Data 5 martie 2015 14:58:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
using namespace std;

int n, m;
int t[100001], s[100001];

void init()
{
    for (int i = 1; i <= n; ++i)
    {
        t[i] = i;
        s[i] = 1;
    }
}

void unify(int x, int y)
{
    if (s[x] > s[y])
    {
        t[y] = x;
        s[x] += s[y];
    }
    else
    {
        t[x] = y;
        s[y] += s[x];
    }
}

int find(int x)
{
    if (t[x] != x)
        t[x] = find(t[x]);
    return t[x];
}

int main()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    fin >> n >> m;
    init();

    int op, p1, p2;
    for (int i = 1; i <= m; ++i)
    {
        fin >> op >> p1 >> p2;
        switch (op)
        {
        case 1:
            unify(find(p1), find(p2));
            break;
        case 2:
            fout << (find(p1) == find(p2) ? "DA" : "NU") << '\n';
            break;
        }
    }
}