# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
666668 | 2022-11-29T09:19:50 Z | divad | Easter Eggs (info1cup17_eastereggs) | C++14 | 0 ms | 0 KB |
#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; /*int query(vector<int> islands){ for(auto it: islands){ if(it == 3){ return true; } } return false; }*/ 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); /*cout << "parcurgere = "; for(auto it: parcurgere){ cout << it << " "; } cout << "\n";*/ /// 0 0 0 0 1 1 1 1 /// ^ int st = 0, dr = parcurgere.size()-1; int ans = 0; 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; }