Cod sursa(job #1373352)

Utilizator StexanIarca Stefan Stexan Data 4 martie 2015 18:14:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

#define NMAX 100010

int N,M,TT[NMAX];

void Init(){
    for (int i = 1; i <= N; i++) {
        TT[i] = i;
    }
}

void Read(){
    f>>N>>M;
}

int Search(int x){
    if (TT[x] == 0)
        return x;
    
    TT[x] = Search(TT[x]);
    return TT[x];
}

bool Merge(int x, int y){
    x = Search(x);y = Search(y);
    if (x == y)
        return false;
    
    TT[y] = x;
    return true;
}

int main()
{
    Read();
    
    int x,y,cod;
    for (int i = 1; i <= M; i++) {
        f>>cod>>x>>y;
        if(cod == 1){
            Merge(x, y);
        }else{
            if (Search(x) == Search(y)) {
                g<<"DA"<<"\n";
            }else{
                g<<"NU"<<"\n";
            }
        }
    }
    return 0;
}