Cod sursa(job #2390719)

Utilizator AlexBlagescuBlagescu Alex George AlexBlagescu Data 28 martie 2019 11:48:59
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int comp[NMAX];
vector <vector<int> > L(NMAX);
int main()
{
    int n,m;
    f>>n>>m;
    for (int i=1;i<=n;i++)
    {
        comp[i]=i;
        L[i].push_back(i);
    }

    for (int i=1;i<=m;i++)
    {
        int cod,x,y;
        f>>cod>>x>>y;
        if (cod==1)
        {
            if (L[comp[x]].size()<L[comp[y]].size())
            {
                auto cx=L[comp[x]].begin(), cy=L[comp[x]].end();
                for (auto i=cx; i!=cy; i++)
                {
                    comp[(*i)]=comp[y];
                    L[comp[y]].push_back((*i));
                }
                L[comp[x]].clear();

            }
            else
            {
                auto cx=L[comp[y]].begin(), cy=L[comp[y]].end();
                for (auto i=cx; i!=cy; i++)
                {
                    comp[(*i)]=comp[x];
                    L[comp[x]].push_back((*i));
                }
                L[comp[y]].clear();
            }
        }
        else
            if (cod==2)
            {
                if (comp[x]==comp[y])
                    g<<"DA";
                else g<<"NU";
                g<<'\n';
            }
    }
    return 0;
}