Cod sursa(job #2152793)

Utilizator andra_moldovanAndra Moldovan andra_moldovan Data 5 martie 2018 19:55:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

#define MAXN 100005

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int dad[MAXN];

int father(int node) {
    if (node != dad[node]) {
        dad[node] = father(dad[node]);
    }
    return dad[node];
}

inline void Update(int a, int b) {
    int v1 = father(a);
    int v2 = father(b);

    dad[v1] = v2;
}

string Query(int a, int b) {
    int v1 = father(a);
    int v2 = father(b);

    if (v1 == v2)
        return "DA";
    return "NU";
}

void Read() {
    int N, M, tip, a, b;

    fin >> N >> M;

    for (int i = 1; i <= N; i++)
        dad[i] = i;

    while (M--) {
        fin >> tip >> a >> b;

        if (tip == 1) {
            Update(a, b);
        }
        else if (tip == 2)
            fout << Query(a, b) << "\n";
    }
}

int main () {
    Read();

    fin.close(); fout.close(); return 0;
}