# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
786790 | 2023-07-18T12:50:55 Z | borisAngelov | Easter Eggs (info1cup17_eastereggs) | C++17 | 0 ms | 0 KB |
#include "grader.h" #include <bits/stdc++.h> using namespace std; const int maxn = 520; int n; vector<int> g[maxn]; vector<int> in_order; void dfs(int node, int par) { in_order.push_back(node); for (auto next_node : g[node]) { if (next_node != par) { dfs(next_node, node); } } } int findEgg(int N, vector<pair<int, int>> edges) { n = N; for (int i = 1; i <= n; ++i) { g[i].clear(); } in_order.clear(); for (int i = 0; i < edges.size(); ++i) { int x = edges[i].first; int y = edges[i].second; g[x].push_back(y); g[y].push_back(x); } dfs(1, -1); int l = 1; int r = n; vector<int> result(maxn, -1); while (l <= r) { ++cnt; int mid = (l + r) / 2; vector<int> ask; for (int i = 0; i < mid; ++i) { ask.push_back(in_order[i]); } int curr = -1; if (result[mid] != -1) { curr = result[mid]; } else { curr = query(ask); } if (curr == 1) { r = mid - 1; } else { l = mid + 1; } } return in_order[l - 1]; }