Cod sursa(job #1401181)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 25 martie 2015 18:15:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>


#define DN 100005
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,t[DN];


void read(){

    f>>n>>m;
}

int getRoot(int node){

    int root = node;
    while( t[root] )
        root = t[root];
    while( t[node] ){

        int nextNode = t[node];
        t[node] = root;
        node = nextNode;
    }
    return root;
}


void join(int x,int y){

    int xRoot = getRoot(x);
    t[ xRoot ] = y;
}

void solve(){

    for(int op,x,y,i=1;i<=m;++i){

        f>>op>>x>>y;
        if(op == 1)
            join(x,y);
        else{

            int xRoot = getRoot(x);
            int yRoot = getRoot(y);
            if( xRoot == yRoot )
                g<<"DA\n";
            else
                g<<"NU\n";
        }
    }
}

int main()
{
    read();
    solve();

    return 0;
}