Submission #45099

#TimeUsernameProblemLanguageResultExecution timeMemory
45099qoo2p5Mousetrap (CEOI17_mousetrap)C++17
45 / 100
1214 ms61492 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int INF = (int) 1e9 + 1e6 + 123; const ll LINF = (ll) 1e18 + 1e9 + 123; #define rep(i, s, t) for (auto i = (s); i < (t); ++(i)) #define per(i, s, t) for (auto i = (s); i >= (t); --(i)) #define sz(x) ((int)(x).size()) #define all(x) (x).begin(), (x).end() #define mp make_pair #define pb push_back bool mini(auto &x, const auto &y) { if (y < x) { x = y; return 1; } return 0; } bool maxi(auto &x, const auto &y) { if (y > x) { x = y; return 1; } return 0; } void run(); int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); run(); return 0; } const int N = (int) 1e6 + 123; int n, t, m; vector<int> g[N]; int dp[N], out[N]; bool has[N]; void dfs(int v, int f = -1) { if (v == t) { has[v] = 1; return; } int pos = -1; int ptr = 0; for (int u : g[v]) { if (u == f) { pos = ptr; ptr++; continue; } dfs(u, v); has[v] |= has[u]; ptr++; } if (pos != -1) { g[v].erase(g[v].begin() + pos); } vector<int> outs; for (int u : g[v]) { outs.pb(out[u]); } if (sz(outs) == 0) { out[v] = 0; } else if (sz(outs) == 1) { out[v] = 1; } else { sort(all(outs)); int k = sz(outs); out[v] = outs[k - 2] + k; } } int solve(int v, int cnt) { if (v == t) { return 0; } assert(has[v]); int to = -1; vector<int> outs; for (int u : g[v]) { if (has[u]) { to = u; } else { outs.pb(out[u]); } } assert(to != -1); sort(all(outs)); cnt++; int k = sz(outs); int cur; if (k <= cnt) { cnt -= k; cur = k; } else { assert(k >= 2); cur = outs[k - 1 - cnt] + k; cnt = INF; } return cur + solve(to, cnt); } void run() { cin >> n >> t >> m; rep(i, 0, n - 1) { int u, v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } dfs(m); cout << solve(m, 0) << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...