Submission #666673

#TimeUsernameProblemLanguageResultExecution timeMemory
666673divadEaster Eggs (info1cup17_eastereggs)C++17
100 / 100
55 ms356 KiB
#include <cstring> #include <vector> #include <deque> #include "grader.h" #define MAX 522 using namespace std; int vf[MAX]; vector<int> v[MAX]; int n,x,y; vector<int> bfs(int N, vector< pair<int, int> > bridges){ memset(vf, 0, sizeof(vf)); for(int i = 0; i < MAX; i++){ v[i].clear(); } for(auto [x, y]: bridges){ v[x].push_back(y); v[y].push_back(x); } deque<int> coada; vf[1] = 1; int maxi = 0; coada.push_back(1); while(!coada.empty()){ int nod = coada.back(); for(auto vecin: v[nod]){ if(vf[vecin] == 0){ vf[vecin] = 1+vf[nod]; maxi = max(maxi, vf[vecin]); coada.push_front(vecin); } } coada.pop_back(); } vector<int> ans; for(int i = 1; i <= maxi; i++){ for(int j = 0; j <= N; j++){ if(vf[j] == i){ ans.push_back(j); } } } return ans; } int findEgg(int N, vector< pair<int, int> > bridges){ vector<int> parcurgere = bfs(N, bridges); /// 0 0 0 0 1 1 1 1 /// ^ int st = 0, dr = parcurgere.size()-2; int ans = parcurgere.back(); while(st <= dr){ int mid = (st+dr)/2; vector<int> partit; for(int i = 0; i <= mid; i++){ partit.push_back(parcurgere[i]); } if(query(partit)){ ans = parcurgere[mid]; dr = mid-1; }else{ st = mid+1; } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...