제출 #687439

#제출 시각아이디문제언어결과실행 시간메모리
687439heeheeheehaawEaster Eggs (info1cup17_eastereggs)C++17
0 / 100
3 ms2896 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...