Cod sursa(job #1207052)

Utilizator MaarcellKurt Godel Maarcell Data 11 iulie 2014 22:18:32
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
using namespace std;
int N,M; int uf[100100],rang[100100];
int cauta(int x){
    int tata=x,aux;
    while (uf[tata]!=tata) tata=uf[tata];

    while(uf[x]!=x){
        aux=uf[x];
        uf[x]=tata;
        x=aux;
    }
    return tata;
}
void uneste(int x, int y){
    if (rang[x] > rang[y])  uf[y]=x;
    else uf[x]=y;

    if (rang[x]==rang[y]) rang[y]++;
}
int main()
{
    ifstream in("disjoint.in");
    ofstream out("disjoint.out");
    in >> N >> M;
    int i,op,x,y;
    for (i=1; i<=N; i++){
        uf[i]=i;
        rang[i]=1;
    }
    for (i=1; i<=M; i++){
        in >> op >> x >> y;
        if (op==1) uneste(x,y);
        else if (cauta(x)==cauta(y)) out << "DA" << "\n";
        else out << "NU" << "\n";
    }
    return 0;
}