Cod sursa(job #2696235)

Utilizator modulopaulModulopaul modulopaul Data 15 ianuarie 2021 16:29:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define MAXNM 100001

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int dad[MAXNM];

int grandDad(int a){
    int b=a, t;
    while(b != dad[b])
        b=dad[b];
    while(a!=b){
        t=dad[a];
        dad[a]=b;
        a=t;
    }

    return a;
}

void comb(int a,int b){
    a=grandDad(a);
    b=grandDad(b);
    dad[b]=a;
}

int main(){
    int n,m;
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        dad[i]=i;
    }

    for(int i=1;i<=m;i++){
        int c,x,y;
        fin>>c>>x>>y;
        if(c==1){
            if(grandDad(x)!=grandDad(y))
                comb(x,y);
        }
        else{
            if(grandDad(x)==grandDad(y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }
    return 0;
}