Submission #161204

#TimeUsernameProblemLanguageResultExecution timeMemory
161204MinnakhmetovMousetrap (CEOI17_mousetrap)C++14
25 / 100
1223 ms59076 KiB
#include <bits/stdc++.h> #define ll long long #define all(aaa) aaa.begin(), aaa.end() using namespace std; const int N = 1e6 + 5; vector<int> g[N]; int n, m, t; bool term[N]; void dive(int node, int anc) { if (node == t) term[node] = 1; for (int to : g[node]) { if (to != anc) { dive(to, node); if (term[to]) term[node] = 1; } } } int dfs(int node, int anc) { int adj = g[node].size() - (anc != -1); vector<int> v; for (int to : g[node]) { if (to != anc) { v.push_back(dfs(to, node) + 1); } } sort(v.rbegin(), v.rend()); if (v.empty()) return 0; else if (v.size() == 1) return 1; return v[1] + adj - 1; } int walk(int node, int anc) { if (node == t) return 0; vector<int> v; int ans = 0, bl = 0; for (int to : g[node]) { if (to != anc) { if (term[to]) { ans += walk(to, node); // if (to == 1) { // cout << walk(to, node) << "\n"; // } } else { bl++; v.push_back(dfs(to, node) + 1); } } } if (v.size() == 1) { ans++; } else if (!v.empty()) { sort(v.rbegin(), v.rend()); ans += v[1] + bl - 1; } // if (node == 3) { // cout << v[1] << "\n"; // } // cout << node + 1 << " " << ans << "\n"; return ans; } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> t >> m; m--, t--; for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; a--, b--; g[a].push_back(b); g[b].push_back(a); } dive(m, -1); cout << walk(m, -1); 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...