Submission #389240

#TimeUsernameProblemLanguageResultExecution timeMemory
389240syl123456Easter Eggs (info1cup17_eastereggs)C++17
100 / 100
17 ms584 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; vector<vector<int>> g, pa; vector<int> dep, ord; void dfs(int i, int p) { pa[i][0] = p; ord.push_back(i); dep[i] = dep[p] + 1; for (int j : g[i]) if (j != p) dfs(j, i); } int lca(int i, int j) { if (dep[i] < dep[j]) swap(i, j); for (int ii = 9; ~ii; --ii) if (dep[pa[i][ii]] >= dep[j]) i = pa[i][ii]; for (int ii = 9; ~ii; --ii) if (pa[i][ii] != pa[j][ii]) i = pa[i][ii], j = pa[j][ii]; return i == j ? i : pa[i][0]; } int findEgg (int N, vector < pair < int, int > > bridges) { g.assign(N, vector<int>()), pa.assign(N, vector<int>(10)); dep.resize(N), dep[0] = -1; for (auto i : bridges) { int x = i.first - 1, y = i.second - 1; g[x].push_back(y), g[y].push_back(x); } dfs(0, 0); for (int i = 1; i < 10; ++i) for (int j = 0; j < N; ++j) pa[j][i] = pa[pa[j][i - 1]][i - 1]; int l = 0, r = N; while (l < r - 1) { int m = l + r >> 1, x = ord[l]; for (int i = l + 1; i < m; ++i) x = lca(x, ord[i]); vector<bool> vis(N, false); vector<int> ans(1, x + 1); vis[x] = true; for (int i = l; i < m; ++i) for (int j = ord[i]; !vis[j]; j = pa[j][0]) vis[j] = true, ans.push_back(j + 1); if (query(ans)) r = m; else l = m; } return ord[l] + 1; }

Compilation message (stderr)

eastereggs.cpp: In function 'int findEgg(int, std::vector<std::pair<int, int> >)':
eastereggs.cpp:35:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   35 |         int m = l + r >> 1, x = ord[l];
      |                 ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...