Submission #687439

# Submission time Handle Problem Language Result Execution time Memory
687439 2023-01-26T12:02:37 Z heeheeheehaaw Easter Eggs (info1cup17_eastereggs) C++17
0 / 100
3 ms 2896 KB
#include <iostream>
#include <vector>
#include "grader.h"

using namespace std;

int hei[50012 + 5], heimax = 0, nrnod;
int parent[50012 + 5];
int fr[50012 + 5], nodlvl[50012 + 5], cnt = 0;
vector<int> muc[50012 + 5];
vector<int> qv;

void reseteaza()
{
    heimax = 0;
    for(int i = 1; i <= 512; i++)
    {
        muc[i].clear();
        hei[i] = 0;
        fr[i] = 0;
    }
    qv.clear();

}

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

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

void findinterval(int st, int dr, int n)
{
    for(int i = 1; i <= n; i++)
        fr[i] = 0;
    for(int i = st; i <= dr; i++)
    {
        int nod = nodlvl[i];
        while(nod != 1)
        {
            fr[nod]++;
            nod = parent[nod];
        }
    }
    qv.push_back(1);
    for(int i = 2; i <= n; i++)
        if(fr[i] > 0)
            qv.push_back(i);
}

int findEgg(int N, vector<pair<int, int>> bridges)
{
    reseteaza();
    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;
        if(st == dr)
            break;
        dfs(1, 1, mij, 1);
        int val = query(qv);
        if(val == true)
            dr = mij;
        else
            st = mij + 1;
    }
    int level = st;
    dfs(1, 1, level, 2);
    st = 1, dr = cnt;
    while(st <= dr)
    {
        qv.clear();
        int mij = (st + dr) / 2;
        if(st == dr)
            break;
        nrnod = 0;
        findinterval(st, mij, N);
        int val = query(qv);
        if(val == true)
            dr = mij;
        else
            st = mij + 1;
    }
    return st;
}
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 2896 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 2896 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 2896 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -