Cod sursa(job #1802114)

Utilizator ancabdBadiu Anca ancabd Data 9 noiembrie 2016 21:16:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <stack>

using namespace std;

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

int n, m, v[100010], op, x, y;
stack<int> q;

void grup(int a, int b)
{
    while(v[a] != 0)
    {
        q.push(a);
        a = v[a];
    }
    while(!q.empty())
    {
        v[q.top()] = a;
        q.pop();
    }
    while(v[b]!=0) {
        q.push(b);
        b=v[b];
    }
    while(!q.empty())
    {
        v[q.top()] = a;
        q.pop();
    }
    v[a] = b;
}
void query(int a, int b)
{
    while(v[a]!=0)
    {
        q.push(a);
        a = v[a];
    }
    while(!q.empty())
    {
        v[q.top()] = a;
        q.pop();
    }
    while(v[b] != 0)
    {
        q.push(b);
        b = v[b];
    }
    while(!q.empty())
    {
        v[q.top()] = b;
        q.pop();
    }
    if(a == b)fout << "DA\n";
    else fout << "NU\n";
}
int main()
{
    fin >> n >> m;

    while(m--)
    {
        fin >>  op >> x >> y;
        switch(op)
        {
            case 1: grup(x,y);break;
            case 2: query(x,y);break;
        }
    }
    return 0;
}