Submission #1321163

#TimeUsernameProblemLanguageResultExecution timeMemory
1321163kantaponzEaster Eggs (info1cup17_eastereggs)C++20
100 / 100
11 ms512 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; const int maxN = 515; int N; vector<int> adj[maxN]; set<int> cur; bool del[maxN]; queue<pair<int,int>> q; // u, pa int findEgg (int n, vector<pair<int,int>> bridges) { N = n; for (auto [u, v] : bridges) { adj[u].emplace_back(v); adj[v].emplace_back(u); } for (int i = 1; i <= N; i++) { cur.insert(i); } while (cur.size() != 1) { int left = cur.size(); int need = left / 2; int ct = 0; vector<int> v; q.push({*cur.begin(), -1}); while (!q.empty()) { auto [u, pa] = q.front(); q.pop(); if (ct >= need) continue; if (!del[u]) ct++; v.emplace_back(u); for (auto vv : adj[u]) { if (vv == pa) continue; q.emplace(vv, u); } } bool ok = query(v); if (ok) { set<int> have; for (auto x : v) { if (!del[x]) have.insert(x); } for (auto x : cur) { if (have.find(x) == have.end()) { del[x] = 1; } } cur = have; } else { for (auto x : v) { del[x] = 1; if (cur.find(x) != cur.end()) cur.erase(x); } } } int ans = *cur.begin(); cur.clear(); memset(del, 0, sizeof del); while (!q.empty()) q.pop(); for (int i = 0; i < maxN; i++) adj[i].clear(); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...