Submission #596987

#TimeUsernameProblemLanguageResultExecution timeMemory
596987OttoTheDinoMousetrap (CEOI17_mousetrap)C++17
0 / 100
278 ms68508 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (int i = s; i <= e; ++i) #define rrep(i,s,e) for (int i = s; i >= e; --i) #define pb push_back #define all(a) a.begin(), a.end() #define len(a) (int)a.size() typedef vector<int> vi; const int mx = 1e6; vi adj[mx+1], road; int n, t, m; bool dfs (int u, int p) { if (u==t) return 1; for (int v : adj[u]) { if (v==p) continue; if (dfs (v, u)) { road.pb(u); return 1; } } return 0; } int dfs2 (int u, int p) { if (len(adj[u])==2) return 1; int ma = 0; for (int v : adj[u]) { if (v==p) continue; ma = max(ma, dfs2 (v, u)); } ma += len(adj[u])-1; return ma; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> t >> m; rep (i,1,n-1) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } dfs (m,-1); int l = len(road), s = 0; vi dp[l]; road.pb(t); rrep (i,l-1,0) { s += len(adj[road[i]])-2; for (int v : adj[road[i]]) { if ((i>0 && v==road[i-1]) || v==road[i+1]) continue; dp[i].pb(dfs2(v,road[i])+s); } sort(all(dp[i]), greater<int>()); } int lo = 0, hi = mx; if (len(dp[0])) lo = dp[0][0]; while (lo<hi) { int mid = (lo+hi)/2, x = 0, suc = 1; rep (i,1,l-1) { x++; for (int j : dp[i]) if (j>mid) x--; suc &= (x>=0); } if (suc) hi = mid; else lo = mid+1; } cout << lo << "\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...