Submission #687382

#TimeUsernameProblemLanguageResultExecution timeMemory
687382heeheeheehaawEaster Eggs (info1cup17_eastereggs)C++17
0 / 100
3088 ms464 KiB
#include <iostream>
#include <vector>
#include "grader.h"

using namespace std;

int hei[512 + 5], heimax = 0, nrnod;
int fr[512 + 5];
vector<int> muc[512 + 5];
vector<int> qv;

void dfsinit(int nod, int anc)
{
    hei[nod] = hei[anc] + 1;
    fr[hei[nod]]++;
    heimax = max(heimax, hei[nod]);
    for(auto it: muc[nod])
        if(it != anc)
            dfsinit(it, nod);
}

void dfs(int nod, int anc, int limita)
{
    qv.push_back(nod);
    for(auto it: muc[nod])
        if(it != anc && hei[it] <= limita)
            dfs(it, nod, limita);
}

void dfslvl(int nod, int anc, int limita, int nrlim)
{
    if(hei[nod] == limita)
        nrnod++;
    qv.push_back(nod);
    for(auto it: muc[nod])
        if(it != anc && hei[it] <= limita && nrnod < nrlim)
            dfs(it, nod, limita);
}

int findEgg(int n, vector<pair<int, int>> bridges)
{
    for(auto it: bridges)
    {
        muc[it.first].push_back(it.second);
        muc[it.second].push_back(it.first);
    }
    dfsinit(1, 1);
    int st = 1, dr = heimax;
    while(st < dr)
    {
        qv.clear();
        int mij = (st + dr) / 2;
        dfs(1, 1, mij);
        bool val = query(qv);
        if(val == true)
            dr = mij;
        else
            st = mij + 1;
    }

    int level = st;
    st = 1, dr = fr[level];
    while(st < dr)
    {
        qv.clear();
        int mij = (st + dr) / 2;
        nrnod = 0;
        dfslvl(1, 1, level, mij);
        bool val = query(qv);
        if(val == true)
            dr = mij;
        else
            st = mij + 1;
    }
    return st;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...