Submission #155894

#TimeUsernameProblemLanguageResultExecution timeMemory
155894DS007Torrent (COI16_torrent)C++14
31 / 100
13 ms760 KiB
#include <bits/stdc++.h> using namespace std; const int mn = 1005; vector<int> adj[mn]; list<int> path; int n, a, b, u, v; bool find(int x, int p = -1) { if (x == b) { path.push_front(b); return true; } for (int i : adj[x]) { if (i != p && find(i, x)) { path.push_front(x); return true; } } return false; } int dfs(int x, int p = -1) { vector<int> s; int c = 0; for (int i : adj[x]) { if ((i == u && x == v) || (i == v && x == u) || i == p) continue; c++; s.push_back(dfs(i, x)); } sort(s.begin(), s.end(), greater<>()); int ans = 0; for (int i = 0, l = s.size(); i < l; i++) ans = max(ans, s[i] + i); return ans + 1; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> a >> b; a--, b--; for (int i = 0; i < n - 1; i++) { int x, y; cin >> x >> y; x--, y--; adj[x].push_back(y); adj[y].push_back(x); } find(a); auto it = path.begin(); u = *it; int ans = 1e9; for (it++; it != path.end(); it++) { v = *it; ans = min(ans, max(dfs(b) - 1, dfs(a) - 1)); u = v; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...