Submission #1220236

#TimeUsernameProblemLanguageResultExecution timeMemory
1220236lukasuliashviliEaster Eggs (info1cup17_eastereggs)C++20
26.40 / 100
7 ms524 KiB
#include <bits/stdc++.h> using namespace std; int query(vector<int> nodes); // Provided externally vector<vector<int>> g; vector<bool> visited; vector<int> subtree; void collect(int u) { visited[u] = true; subtree.push_back(u); for (int v : g[u]) { if (!visited[v]) { collect(v); } } } int findEgg(int n, vector<pair<int, int>> edges) { g.assign(n + 1, {}); for (auto [u, v] : edges) { g[u].push_back(v); g[v].push_back(u); } vector<int> current; // Step 1: Start with a full traversal from node 1 visited.assign(n + 1, false); subtree.clear(); collect(1); current = subtree; while (current.size() > 1) { // Step 2: Try to extract a connected half from current visited.assign(n + 1, false); vector<int> half; queue<int> q; // Start from any node in current q.push(current[0]); visited[current[0]] = true; unordered_set<int> currentSet(current.begin(), current.end()); half.push_back(current[0]); while (!q.empty() && half.size() < current.size() / 2) { int u = q.front(); q.pop(); for (int v : g[u]) { if (!visited[v] && currentSet.count(v)) { visited[v] = true; q.push(v); half.push_back(v); if (half.size() >= current.size() / 2) break; } } } // Step 3: Query the half if (query(half)) { current = half; } else { unordered_set<int> halfSet(half.begin(), half.end()); vector<int> other; for (int x : current) { if (!halfSet.count(x)) other.push_back(x); } current = other; } } return current[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...