Submission #830095

#TimeUsernameProblemLanguageResultExecution timeMemory
830095t6twotwoMousetrap (CEOI17_mousetrap)C++17
0 / 100
260 ms88228 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, t, m; cin >> N >> t >> m; t--, m--; vector<vector<int>> adj(N); for (int i = 0; i < N - 1; i++) { int x, y; cin >> x >> y; x--, y--; adj[x].push_back(y); adj[y].push_back(x); } vector<int> p(N, -1); queue<int> q; p[m] = m; q.push(m); while (!q.empty()) { int x = q.front(); q.pop(); for (int y : adj[x]) { if (p[y] == -1) { p[y] = x; q.push(y); } } } vector<int> path{t}; while (path.back() != m) { path.push_back(p[path.back()]); } vector<bool> in(N); for (int x : path) { in[x] = 1; } vector<int> f(N); auto dfs = [&](auto dfs, int x, int p) -> void { vector<int> s; for (int y : adj[x]) { if (y == p || in[y]) { continue; } dfs(dfs, y, x); s.push_back(f[y]); } sort(s.rbegin(), s.rend()); if (s.empty()) { return; } if (s.size() == 1) { f[x] = 1; return; } f[x] = s[1] + s.size(); }; vector<vector<int>> ch(N); for (int x : path) { for (int y : adj[x]) { if (!in[y]) { ch[x].push_back(y); } } dfs(dfs, x, -1); } int M = path.size(); vector<int> z(M + 1); for (int i = 0; i < M; i++) { z[i + 1] = z[i] + ch[path[i]].size(); } vector<int> dp(M, 1E9); dp[1] = f[path[1]]; for (int i = 2; i < M; i++) { vector<int> s; for (int j : ch[path[i]]) { s.push_back(f[j]); } sort(s.rbegin(), s.rend()); if (s.empty()) { dp[i] = max(0, dp[i - 1] - 1); } else { dp[i] = max({0, dp[i - 1] - 1, s[0] + z[i + 1]}); if (s.size() == 1) { dp[i] = min(dp[i], dp[i - 1] + 1); } else { dp[i] = min(dp[i], max(dp[i - 1] + 1, s[1] + z[i + 1])); } } } for (int i = 1; i < M; i++) { cout << path[i] + 1 << " " << z[i + 1] << " " << dp[i] << "\n"; } cout << dp[M - 1] << "\n"; return 6/22; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...