# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
671477 | 2022-12-13T05:49:59 Z | user149 | Easter Eggs (info1cup17_eastereggs) | C++14 | 0 ms | 0 KB |
#include<bits/stdc++.h> #include "grader.h" using namespace std; using pii=pair<int,int>; int N; vector<int> adjlist[555]; bool seen[555]; vector<int> preorder={-1}; void init(){ fill(seen,seen+555,0); fill(adjlist,adjlist+555,(vector<int>){}); preorder={-1}; } void dfs(int node){ seen[node]=1; preorder.push_back(node); for(int child:adjlist[node]){ if(!seen[child]) dfs(child); } } int bsearch(){ int lo=1; int hi=N; vector<int> query_vector; // always a prefix [1..i] while(lo!=hi){ int mid=(lo+hi)/2; while(query_vector[query_vector.size()-1]>lo) query_vector.pop_back(); for(int i=lo+1;i<=mid;i++){ query_vector.push_back(i); } if(query(query_vector)) hi=mid; else lo=mid+1; } return lo; } int findEgg(int _N, vector<pii> edges){ N=_N; init(); for(pii i:edges){ int a,b; tie(a,b)=i; adjlist[a].push_back(b); adjlist[b].push_back(a); } dfs(1); return bsearch(); } for(int child:adjlist[node]){ if(!seen[child]) dfs(child); } } int bsearch(){ int lo=1; int hi=N; vector<int> query_vector; // always a prefix [1..i] while(lo!=hi){ int mid=(lo+hi)/2; while(query_vector[query_vector.size()-1]>lo) query_vector.pop_back(); for(int i=lo+1;i<=mid;i++){ query_vector.push_back(i); } if(query(query_vector)) hi=mid; else lo=mid+1; } return lo; } int findEgg(int _N, vector<pii> edges){ N=_N; init(); for(pii i:edges){ int a,b; tie(a,b)=i; adjlist[a].push_back(b); adjlist[b].push_back(a); } dfs(1); return bsearch(); }