Cod sursa(job #1096962)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 2 februarie 2014 19:25:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
using namespace std;

int n,m,tata[100010],h[100010];

void uneste(int nod1,int nod2) {

    if(h[nod1]==h[nod2]){
        h[nod1]++;
        tata[nod2]=nod1;
    }

    if(h[nod1]>h[nod2])
        tata[nod2]=nod1;
    if(h[nod2]>h[nod1])
        tata[nod1]=nod2;

}

int dfs(int nod) {

    if(tata[nod]==nod)
        return nod;
    return dfs(tata[nod]);

}

int main() {

    ifstream in("disjoint.in");
    ofstream out("disjoint.out");
    int i,x,y,task;
    in>>n>>m;
    for(i=1;i<=n;i++) {
        tata[i]=i;
        h[i]=1;
    }
    for(i=1;i<=m;i++) {
        in>>task>>x>>y;
        if(task==1)
            uneste(dfs(x),dfs(y));
        if(task==2){
            if(dfs(y)==dfs(x))
                out<<"DA"<<'\n';
            else
                out<<"NU"<<'\n';
        }
    }

    in.close();
    out.close();
    return 0;

}