Submission #569562

#TimeUsernameProblemLanguageResultExecution timeMemory
569562d4xnEaster Eggs (info1cup17_eastereggs)C++17
0 / 100
13 ms464 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; const int N = 512; int n; vector<vector<int>> adj; vector<bool> vis; vector<bool> r; vector<int> p; vector<int> sz; vector<int> q; void dfs1(int u = 0, int par = -1) { p[u] = par; for (int &v : adj[u]) { if (v == par) continue; dfs1(v, u); } } void dfs2(int u) { vis[u] = 1; sz[u] = 1; for (int &v : adj[u]) { if (v == p[u] || r[v]) continue; if (!vis[v]) dfs2(v); sz[u] += sz[v]; } } int findSubtree(int ssz) { for (int i = 0; i < n; i++) { if (!r[i] && sz[i] == ssz) return i; } return -1; // never reached } void fillQuery(int u) { q.push_back(u+1); for (int &v : adj[u]) { if (v == p[u] || r[v]) continue; fillQuery(v); } } int findEgg (int N, vector < pair < int, int > > bridges) { n = N; adj.clear(); adj.resize(N); vis.clear(); vis.resize(N, 0); r.clear(); r.resize(N, 0); p.clear(); p.resize(N, -1); sz.clear(); sz.resize(N, 1); q.clear(); for (auto &[x, y] : bridges) { adj[x-1].push_back(y-1); adj[y-1].push_back(x-1); } dfs1(); int x = n; while (x != 1) { vis.clear(); vis.resize(N, 0); for (int i = 0; i < n; i++) { if (vis[i] || r[i]) continue; dfs2(i); } int mid = x/2; int u = findSubtree(mid); if (u == -1) { mid++; u = findSubtree(mid); } if (u == -1) { mid++; u = findSubtree(mid); } if (u == -1) { mid -= 3; u = findSubtree(mid); } q.clear(); fillQuery(u); if (query(q)) { for (int i = 0; i < n; i++) { r[i] = 1; } for (int &i : q) r[i-1] = 0; x = mid; } else { for (int &i : q) r[i-1] = 1; x -= mid; } } vis.clear(); vis.resize(N, 0); for (int i = 0; i < n; i++) { if (vis[i] || r[i]) continue; dfs2(i); } return findSubtree(1) + 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...