Submission #1279784

#TimeUsernameProblemLanguageResultExecution timeMemory
1279784SSKMFBosses (BOI16_bosses)C++20
100 / 100
395 ms748 KiB
#include <bits/stdc++.h>
using namespace std;

vector <int> adiacenta[5001];
int distanta[5001] , moment[5001];

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int numar_noduri;
    cin >> numar_noduri;

    for (int nod = 1 ; nod <= numar_noduri ; nod++)
    {
        int grad;
        cin >> grad;

        while (grad--)
        {
            int sursa; cin >> sursa;
            adiacenta[sursa].push_back(nod);
        }
    }

    int minim = INT32_MAX;
    for (int radacina = 1 ; radacina <= numar_noduri ; radacina++)
    {
        distanta[radacina] = 1;
        moment[radacina] = radacina;

        int suma = 1 , vizitat = 1;
        queue <int> candidati; candidati.push(radacina);
        while (!candidati.empty())
        {
            const int nod = candidati.front();
            candidati.pop();

            for (auto& vecin : adiacenta[nod]) {
                if (moment[vecin] != radacina)
                {
                    moment[vecin] = radacina;
                    distanta[vecin] = distanta[nod] + 1;
                    suma += distanta[vecin];
                    candidati.push(vecin);
                    vizitat++;
                }
            }
        }

        if (vizitat == numar_noduri)
            { minim = min(minim , suma); }
    }

    cout << minim;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...