Cod sursa(job #2397153)

Utilizator Marcu314Marcu Ionut Marcu314 Data 4 aprilie 2019 11:12:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

int main()
{
    int N,M,x,y,compCur,compFor;
    short cod;
    FILE *in=fopen("disjoint.in","r");
    FILE *out=fopen("disjoint.out","w");
    fscanf(in,"%i %i",&N,&M);
    vector<vector<int>>nod_comp(N+1);
    vector<int>comp(N+1);
    for(int i=1;i<=N;i++)
    {
        comp[i]=i;
        nod_comp[i].push_back(i);
    }
    for(int i=1;i<=M;i++)
    {
        fscanf(in,"%i %i %i",&cod,&x,&y);
        if(cod == 1)
        {
            if(nod_comp[comp[x]].size() > nod_comp[comp[y]].size())
            {
                compCur = comp[x];
                compFor = comp[y];
                for(auto z : nod_comp[compFor])
                {
                    comp[z] = compCur;
                    nod_comp[compCur].push_back(z);
                }
                nod_comp[compFor].clear();
            }
            else
            {
                compCur = comp[y];
                compFor = comp[x];
                for(auto z : nod_comp[compFor])
                {
                    comp[z] = compCur;
                    nod_comp[compCur].push_back(z);
                }
                nod_comp[compFor].clear();
            }

        }
        else
            (comp[x] == comp[y])?fprintf(out,"DA\n"):fprintf(out,"NU\n");
    }
    return 0;
}