Cod sursa(job #668703)

Utilizator feelshiftFeelshift feelshift Data 25 ianuarie 2012 15:13:50
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
// http://infoarena.ro/problema/disjoint
#include <fstream>
using namespace std;

const int MAXSIZE = 100001;

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

int length,operations;
int father[MAXSIZE];

void join(int first,int second);
int findAndUpdate(int node);

int main()
{
    in >> length >> operations;

    int type,first,second;
    for(int i=1;i<=operations;i++)
    {
        in >> type >> first >> second;

        if(type == 1)
            {
                int a = findAndUpdate(first);
                int b = findAndUpdate(second);
                join(a,b);
            }
        else
        {
            for(int i=1;i<=length;i++)
                out << father[i] << " ";

            if(findAndUpdate(first) == findAndUpdate(second))
                out << "DA\n";
            else
                out << "NU\n";

            out << "\n";
        }
    }

    return (0);
}

void join(int first,int second)
{
    father[first] = second;
}

int findAndUpdate(int node)
{
    if(!father[node])
        return node;
    else
    {
        father[node] = findAndUpdate(father[node]);
        return father[node];
    }
}