Cod sursa(job #2170636)

Utilizator edynator34Nechitoaia George-Edward edynator34 Data 15 martie 2018 09:09:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
struct punct{
    int parinte;
    int rang;

} kr[nmax];
int n,m,x,y,cod;

void make_set(){
    for(int i=1;i<=n;++i){
        kr[i].parinte=i;
        kr[i].rang=1;
    }
}

int Find(int x){
    if(kr[x].parinte!=x) return Find(kr[x].parinte);
    return kr[x].parinte;
}

void Union(int x, int y){
    int xRoot=Find(x);
    int yRoot=Find(y);
    if(kr[xRoot].rang > kr[yRoot].rang){
        kr[yRoot].parinte = xRoot;
        kr[xRoot].rang += kr[yRoot].rang;
    }
    else {
        kr[xRoot].parinte = yRoot;
        kr[yRoot].rang += kr[xRoot].rang;
    }
}

int main()
{
    in>>n>>m;
    make_set();
    for(int i=1;i<=m;++i){
        in>>cod>>x>>y;
        if(cod==1) Union(x,y);
        else {
            if(Find(x)==Find(y)) out<<"DA"<<'\n';
            else out<<"NU"<<'\n';
        }
    }
    return 0;
}