Submission #583432

#TimeUsernameProblemLanguageResultExecution timeMemory
583432600MihneaMousetrap (CEOI17_mousetrap)C++17
25 / 100
1010 ms64176 KiB
#include <bits/stdc++.h> using namespace std; const int N = (int) 1e6 + 7; int n, tr, mo; vector<int> g[N]; int par[N], cost[N]; void build_tree(int a, int p = -1) { { vector<int> Kids; for (auto &b : g[a]) { if (b != p) { Kids.push_back(b); } } g[a] = Kids; } for (auto &b : g[a]) { build_tree(b, a); } par[a] = p; } void build_cost(int a) { cost[a] += (int) g[a].size() - 1 + 1; for (auto &b : g[a]) { cost[b] += cost[a]; build_cost(b); } } void dfs(int a) { for (auto &b : g[a]) { dfs(b); } if ((int) g[a].size() == 0) { return; } if ((int) g[a].size() == 1) { return; } assert((int) g[a].size() >= 2); vector<int> Values; for (auto &b : g[a]) { Values.push_back(cost[b]); } sort(Values.rbegin(), Values.rend()); assert((int) Values.size() >= 2); cost[a] = Values[1]; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); /// freopen ("input.txt", "r", stdin); cin >> n >> tr >> mo; for (int i = 1; i < n; i++) { int a, b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } build_tree(tr); build_cost(tr); dfs(tr); cout << cost[mo] - 1 << "\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...