Submission #434689

#TimeUsernameProblemLanguageResultExecution timeMemory
434689KoDMousetrap (CEOI17_mousetrap)C++17
0 / 100
1384 ms69028 KiB
#include <bits/stdc++.h> template <class T> using Vec = std::vector<T>; template <class F> struct RecLambda : private F { explicit RecLambda(F&& f) : F(std::forward<F>(f)) {} template <class... Args> decltype(auto) operator() (Args&&... args) const { return F::operator()(*this, std::forward<Args>(args)...); } }; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N, T, M; std::cin >> N >> T >> M; T -= 1; M -= 1; Vec<Vec<int>> graph(N); for (int i = 0; i < N - 1; ++i) { int a, b; std::cin >> a >> b; a -= 1; b -= 1; graph[a].push_back(b); graph[b].push_back(a); } Vec<int> parent(N, -1); RecLambda([&](auto&& dfs, const int u) -> void { for (const int v : graph[u]) { if (parent[u] != v) { parent[v] = u; dfs(v); } } })(T); Vec<int> dp(N, -1); Vec<char> used(N); const auto down = RecLambda([&](auto&& dfs, const int u) -> int { if (dp[u] != -1) { return dp[u]; } Vec<int> cand; for (const int v : graph[u]) { if (v != parent[u] and !used[v]) { cand.push_back(dfs(v)); } } std::sort(cand.rbegin(), cand.rend()); if (cand.size() <= 1) { return dp[u] = (int) cand.size(); } return dp[u] = cand[1] + (int) cand.size(); }); Vec<int> cut(N); RecLambda([&](auto&& dfs, const int u) -> void { for (const int v : graph[u]) { if (parent[u] != v) { cut[v] += cut[u]; if (u != T) { cut[v] += (int) graph[u].size() - 2; } dfs(v); } } })(T); std::cout << RecLambda([&](auto&& dfs, const int u) -> int { if (u == T) { return 0; } used[u] = true; int dmax = 0; for (const int v : graph[u]) { if (parent[u] != v and !used[v]) { dmax = std::max(dmax, down(v) + 1); } } return std::min(dmax + cut[u] + 2, std::max(down(u) + cut[u], dfs(parent[u]))); })(M) << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...