# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
516666 | 2022-01-21T18:21:53 Z | lucri | Easter Eggs (info1cup17_eastereggs) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> #include "grader.h" 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(nra[x].first==1) l[x.first].first=x.second; else l[x.first].second=x.second; if(nra[x].second==1) l[x.second].first=x.first; else l[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]; }