Submission #1280924

#TimeUsernameProblemLanguageResultExecution timeMemory
1280924SSKMFEaster Eggs (info1cup17_eastereggs)C++20
100 / 100
10 ms484 KiB
#include <bits/stdc++.h>
#include "grader.h"
using namespace std;

int findEgg (int numar_noduri , vector < pair <int, int> > muchii)
{
    vector <int> adiacenta[513];
    int moment[513] = { } , masca[513] = { };
    for (auto& muchie : muchii)
    {
        adiacenta[muchie.first].push_back(muchie.second);
        adiacenta[muchie.second].push_back(muchie.first);
    }

    int ramas = numar_noduri , __masca = 0;
    while (ramas > 1)
    {
        moment[0]++;
        queue <int> candidati;
        vector <int> gasit , total;
        for (candidati.push(1) , moment[1] = moment[0] ; true ; candidati.pop())
        {
            int& nod = candidati.front();
            if ((masca[nod] & __masca) == __masca)
            {
                total.push_back(nod);
                if (masca[nod] == __masca)
                    { gasit.push_back(nod); }

                if ((int)gasit.size() == ramas / 2)
                    { break; }
                
                for (auto& vecin : adiacenta[nod]) {
                    if (moment[vecin] != moment[0])
                    {
                        moment[vecin] = moment[0];
                        candidati.push(vecin);
                    }
                }
            }
        }

        const int putere = (1 << (moment[0] - 1));
        for (auto& nod : total)
            { masca[nod] |= putere; }

        if (query(total))
            { __masca |= putere; ramas = (int)gasit.size(); }
        else
            { ramas -= (int)gasit.size(); }
    }

    int nod = 1;
    while (masca[nod] != __masca)
        { nod++; }

    return nod;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...