Cod sursa(job #3041053)

Utilizator stefan05Vasilache Stefan stefan05 Data 30 martie 2023 21:30:22
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>

#define NMAX 100005

using namespace std;

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

int n, m;
vector<int> l[NMAX];
int cc[NMAX];
int cod, x, y;
int minim;
int maxim, imax;
int i, j;

void dfs(int);

int main()
{
    fin >>n>>m;

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

    for (i = 1; i <= m; ++i)
    {
        fin >>cod>>x>>y;
        if (cod == 1)
        {
            if (cc[x] < cc[y])
            {
                minim = cc[x];
                maxim = cc[y]; imax = y;
            }
            else
                {
                    minim = cc[y];
                    maxim == cc[x]; imax = x;
                }

            dfs(imax);
            l[x].push_back(y);
            l[y].push_back(x);
        }
        else
            fout <<(cc[x] == cc[y]? "DA\n": "NU\n");
    }
    fout.close();
    return 0;
}

void dfs(int vf)
{
    cc[vf] = minim;
    for (auto vfnou: l[vf])
        if (cc[vfnou] == maxim)
            dfs(vfnou);
}