Submission #118343

#TimeUsernameProblemLanguageResultExecution timeMemory
118343teomrnMousetrap (CEOI17_mousetrap)C++14
45 / 100
1014 ms64376 KiB
#include <bits/stdc++.h> using namespace std; const int NMAX = 1000010; vector <int> adia[NMAX]; int cost[NMAX]; int tata[NMAX]; int nr_op; void dfs(int nod, int t) { if (t) adia[nod].erase(find(adia[nod].begin(), adia[nod].end(), t)); tata[nod] = t; for (auto i : adia[nod]) dfs(i, nod); int max1 = 0, max2 = 0; for (auto i : adia[nod]) { if (cost[i] > max1) max2 = max1, max1 = cost[i]; else if (cost[i] > max2) max2 = cost[i]; } cost[nod] = adia[nod].size() + max2; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, root, x; cin >> n >> root >> x; if (root == x) { cout << "0\n"; return 0; } for (int i = 1; i < n; i++) { int a, b; cin >> a >> b; adia[a].push_back(b); adia[b].push_back(a); } dfs(root, 0); int ans = cost[x]; x = tata[x]; while (x != root) { ans += adia[x].size() - 1; x = tata[x]; } cout << ans << '\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...