Cod sursa(job #2341507)

Utilizator EmanuelPuturaEmanuel Putura EmanuelPutura Data 11 februarie 2019 21:23:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
using namespace std;

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

const int MaxN = 100001;

int n, m;
int cod, x, y;

int t[MaxN], r[MaxN];

void Read();
void Union(int r1, int r2);
int Find(int x);

int main()
{
    Read();

    return 0;
}

void Read()
{
    int k{0};

    fin >> n >> m;

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

    for(int i = 1; i <= m; ++i)
    {
        fin >> cod >> x >> y;

        if (cod == 1) Union(x, y);
        else if (cod == 2)
            if (Find(x) == Find(y))
                r[++k] = 1;
            else r[++k] = 0;
    }

    for(int i = 1; i <= k; ++i)
        if (r[i] == 1) fout << "DA\n";
        else if(!r[i]) fout << "NU\n";
}

void Union(int r1, int r2)
{
    t[Find(r1)] = t[Find(r2)];
}

int Find(int x)
{
    if (t[x] == x)
        return x;
    return t[x] = Find(t[x]);
}