Cod sursa(job #2713718)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 28 februarie 2021 15:12:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <iostream>
#define nmax 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int v[nmax];

int root(int x)
{
    int t = x;
    while (v[t] >= 0)
        t = v[t];
    return t;
}
int tie(int a, int b)
{
    int x = root(a);
    int y = root(b);
    // v[x], v[y] < 0
    if (v[x] < v[y]) {
        v[x] += v[y];
        v[y] = x;
    }
    else {
        v[y] += v[x];
        v[x] = y;
    }
}
int query(int a, int b)
{
    int x = root(a);
    int y = root(b);
    if  (x == y)
        return 1;
    else
        return 0;
}
int main()
{
    int n, m;

    f >> n >> m;

    for (int i = 1; i <= n; i++)
        v[i] = -1;

    for (int i = 1; i <= m; i++) {
        int op;
        int a, b;

        f >> op >> a >> b;
        if (op == 1)
            tie(a, b);
        else
            g << (query(a, b) ? "DA\n" : "NU\n");
    }


    return 0;
}