제출 #49399

#제출 시각아이디문제언어결과실행 시간메모리
49399georgerapeanuEaster Eggs (info1cup17_eastereggs)C++11
0 / 100
13 ms884 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; vector<int> G[600]; vector<int> nodes; void linearize(int node,int father){ nodes.push_back(node); for(auto it:G[node]){ if(it != father){ linearize(it,node); nodes.push_back(node); } } } vector<int> que; bool ok(int le,int ri){ que.clear(); for(int i = le;i <= ri;i++){ que.push_back(nodes[i]); } sort(que.begin(),que.end()); que.resize(unique(que.begin(),que.end()) - que.begin()); return query(que); } bool nope[600]; int findEgg (int N, vector < pair < int, int > > bridges){ memset(nope,0,sizeof(nope)); nodes.clear(); for(int i = 1;i <= N;i++){ G[i].clear(); } for(auto it:bridges){ G[it.first].push_back(it.second); G[it.second].push_back(it.first); } linearize(1,0); while((int)nodes.size() > 1){ int mid = (int)(nodes.size()-1) / 2; vector<int> tmp; if(ok(0,mid)){ for(int i = 0;i <= mid;i++){ if(!nope[nodes[i]]){ tmp.push_back(nodes[i]); } } nodes = tmp; } else{ for(int i = 0;i <= mid;i++){ nope[nodes[i]] = 1; } for(int i = mid + 1;i < (int)nodes.size();i++){ if(!nope[nodes[i]]){ tmp.push_back(nodes[i]); } } nodes = tmp; } } return nodes[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...