Cod sursa(job #2289497)

Utilizator SweetHumanAvram Gheorghe SweetHuman Data 24 noiembrie 2018 17:57:42
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f1("disjoint.in");
ofstream f2("disjoint.out");
int tati[100005], rang[100005];

int n,m;

int find(int x){
    int R, y;

    for(R = x; R!=tati[R]; R = tati[R]);

    while(tati[x]!=x){
        y=tati[x];
        tati[x]=R;
        x=y;
    }

    return R;
}

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

    if(rang[x]==rang[y])
        rang[y]++;
}
int main() {
    int operatie, x,y,radx,rady;
    f1>>n>>m;
    for(int i=1;i<=n;i++)
    {
        tati[i]=i;
        rang[i]=1;
    }
    for(int i=0; i<m;i++){
        f1>>operatie>>x>>y;
        if(operatie == 1)
            unite(find(x), find(y));
        if(operatie == 2){
            if(tati[find(x)]==tati[find(y)])
                f2<<"DA"<<endl;
            else
                f2<<"NU"<<endl;
        }
    }
    return 0;
}