제출 #687388

#제출 시각아이디문제언어결과실행 시간메모리
687388heeheeheehaawEaster Eggs (info1cup17_eastereggs)C++17
0 / 100
2 ms592 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 reset() { 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; 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) { reset(); 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...