Submission #1220478

#TimeUsernameProblemLanguageResultExecution timeMemory
1220478LucaIlieMousetrap (CEOI17_mousetrap)C++20
25 / 100
560 ms64164 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 1e6; bool onPathTM[MAX_N + 1]; int parent[MAX_N + 1]; int dp[MAX_N + 1]; vector<int> adj[MAX_N + 1]; void dfs(int u, int p) { parent[u] = p; for (int v: adj[u]) { if (v == p) continue; dfs(v, u); } } void calcDp(int u, int p) { int max1 = 0, max2 = 0; int sons = 0; for (int v: adj[u]) { if (v == p) continue; calcDp(v, u); if (!onPathTM[v]) { if (dp[v] > max1) { max2 = max1; max1 = dp[v]; } else if (dp[v] > max2) max2 = dp[v]; sons++; } } dp[u] = (sons > 0) + max2 + (sons > 1) + max(0, sons - 2); // printf("%d %d\n", u, dp[u]); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, t, m; cin >> n >> t >> m; for (int e = 0; e < n - 1; e++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } dfs(t, 0); int w = m; while (w != t) { onPathTM[w] = true; w = parent[w]; } calcDp(t, 0); cout << dp[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...