제출 #1220238

#제출 시각아이디문제언어결과실행 시간메모리
1220238lukasuliashviliEaster Eggs (info1cup17_eastereggs)C++20
10 / 100
5 ms464 KiB
#include <bits/stdc++.h> using namespace std; int query(vector<int> nodes); // Provided externally vector<vector<int>> g; vector<bool> removed; vector<int> sizes; void dfs_size(int u, int p) { sizes[u] = 1; for (int v : g[u]) { if (v != p && !removed[v]) { dfs_size(v, u); sizes[u] += sizes[v]; } } } int find_centroid(int u, int p, int total) { for (int v : g[u]) { if (v != p && !removed[v] && sizes[v] > total / 2) { return find_centroid(v, u, total); } } return u; } void collect_subtree(int u, int p, vector<int>& result) { result.push_back(u); for (int v : g[u]) { if (v != p && !removed[v]) { collect_subtree(v, u, result); } } } int decompose(int root) { dfs_size(root, -1); int total = sizes[root]; int centroid = find_centroid(root, -1, total); removed[centroid] = true; for (int v : g[centroid]) { if (!removed[v]) { vector<int> subtree; collect_subtree(v, centroid, subtree); if (query(subtree)) { return decompose(v); } } } return centroid; } int findEgg(int n, vector<pair<int, int>> edges) { g.assign(n + 1, {}); removed.assign(n + 1, false); sizes.assign(n + 1, 0); for (auto [u, v] : edges) { g[u].push_back(v); g[v].push_back(u); } return decompose(1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...