# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
516659 | 2022-01-21T18:08:52 Z | lucri | Easter Eggs (info1cup17_eastereggs) | C++14 | 0 ms | 0 KB |
#include <iostream> #include <vector> #include <set> using namespace std; vector<int>v; vector<pair<int,int>>l; bool ok[520]; void constructie(int poz,int n) { int nr=0; while(++nr<=n) { ok[poz]=true; v.push_back(poz); if(ok[l[poz].first]==true) poz=l[poz].second; else poz=l[poz].first; } return; } //int query(vector < int > islands); int findEgg(int N, vector < pair < int, int > > bridges) { v.clear(); l.clear(); int nra[520]={0}; l.resize(N+5); v.resize(N+5); for(int i=1;i<=N;++i) ok[i]=false; for(auto x:bridges) { ++nra[x.first]; ++nra[x.second]; if(l[nra[x.first]].first==0) l[nra[x.first]].first=x.second; else l[nra[x.first]].second=x.second; if(l[nra[x.second]].first==0) l[nra[x.second]].first=x.first; else l[nra[x.second]].second=x.first; } for(int i=1;i<=N;++i) { if(nra[i]==0) constructie(i,N); break; } int b=0,e=N-1; while(b<=e) { int m=(b+e)/2; vector<int>q; for(int x=b;x<=e;++x) q.push_back(v[x]); if(query(q)) e=m-1; else b=m+1; q.clear(); } return v[b]; }