Cod sursa(job #1946877)

Utilizator Andreiii500Andrei Puiu Andreiii500 Data 30 martie 2017 16:05:30
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<iostream>
#include<fstream>
using namespace std;

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

const int N = 100001;

int boss[N],n,m;

void update(int a, int b)
{
    while(a != boss[a]) a = boss[a];
    while(b != boss[b]) b = boss[b];

    boss[a] = boss[b];
}

void query(int a, int b)
{
    while(a != boss[a]) a = boss[a];
    while(b != boss[b]) b = boss[b];

    if(boss[a] == boss[b]) out<<"DA\n";
    else out<<"NU\n";
}

void afis()
{
    int i;
    for(i=1; i<=n; ++i) cout<<i<<" "; cout<<"\n";
    for(i=1; i<=n; ++i) cout<<boss[i]<<" "; cout<<"\n";
    cout<<"\n";
}

int main()
{
    in>>n>>m;
    for(int i=1; i<=n; ++i) boss[i] = i;
    for(int i=0; i<m; ++i)
    {
        int tip,x,y;
        in>>tip>>x>>y;
        if(tip == 1) update(x, y);
        else if(tip == 2) query(x, y);
    }

    return 0;
}