Cod sursa(job #2367745)

Utilizator waren4Marius Radu waren4 Data 5 martie 2019 12:03:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

int n,m;

int rang[100005]; int point[100005];

int rad(int nod) {

    int r = nod;
    int x;

    while(point[r] != r) {
        r = point[r];
    }

    while(nod != point[nod]) {
        x = point[nod];
        point[nod] = r;
        nod = x;
    }

    return r;
}

void unite(int x, int y) {
    if (rang[x] > rang[y]) {
        point[y] = x;
    }
    else {
        point[x] = y;
    }
    if(rang[x] == rang[y]) {
        ++rang[y];
    }
}

int main() {
    int i,tip,x,y;
    f>>n>>m;
    for(i = 1; i <= n ; ++i) {
        rang[i] = 1;
        point[i] = i;
    }
    for(i = 1; i <= m; ++i) {
        f>>tip>>x>>y;
        if(tip == 1) {
            unite(rad(x),rad(y));
        }
        else {
            if( rad(x) == rad(y) ) {
                g<<"DA"<<'\n';

            }
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}