Cod sursa(job #2073155)

Utilizator asztalos.l.danielA. B. Daniel asztalos.l.daniel Data 22 noiembrie 2017 19:17:20
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <stdlib.h>

#define NMAX 100000

using namespace std;

int tomb[NMAX];
ofstream g("disjoin.out");

int root(int a){
    int i=a;
    while(i!=tomb[i]){
        i=tomb[i];
    }
    return i;
}

void unite(int a, int b){
    int root1=root(a);
    int root2=root(b);
    if(root1!=root2){
        tomb[root1]=root2;
    }
}

void ask(int a,int b){
    int root1=root(a);
    int root2=root(b);

    if(root1==root2){
        g<<"DA\n";
    }
    else{
        g<<"NU\n";
    }
}

int main()
{
    ifstream f("disjoin.in");
    ofstream g("disjoin.out");
    int n,m,muv,a,b;
    f>>n>>m;
    bool ok;
    for(int i=1;i<=n;i++){
        tomb[i]=i;
    }
    for(int i=0;i<m;i++){
        f>>muv>>a>>b;
        if(muv==1){
            unite(a,b);
        }
        else{
            ask(a,b);
        }
    }
    f.close();
    g.close();
    return 0;
}