Cod sursa(job #2512453)

Utilizator altcontnoualt cont altcontnou Data 21 decembrie 2019 10:13:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

int father[100005],depth[100005], n, m, a, b, tip;

int old_man(int ind)
{
    if (father[ind]==ind)
        return ind;
    return old_man(father[ind]);
}

void conc(int a, int b)
{
    int auxa=old_man(a);
    int auxb=old_man(b);
    if (auxa!=auxb)
    {
        if (depth[auxa]<depth[auxb])
            father[auxa]=auxb;
        else if (depth[auxb]<depth[auxa])
            father[auxb]=auxa;
        else
            father[auxa]=auxb, depth[auxb]++;
    }
}

void query(int a, int b)
{
    if (old_man(a)==old_man(b))
    {
        g << "DA\n";
        return;
    }
    g << "NU\n";
}

int main()
{
    f >> n >> m;
    for (int i=1; i<=n; ++i)
        father[i]=i, depth[i]=1;
    for (int i=1; i<=m; ++i)
    {
        f >> tip >> a >> b;
        if (tip==1)
            conc(a,b);
        else
            query(a,b);
    }
    return 0;
}