Submission #417963

#TimeUsernameProblemLanguageResultExecution timeMemory
417963OttoTheDinoRace (IOI11_race)C++17
9 / 100
255 ms56704 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (ll i = s; i <= e; ++i) #define rrep(i,s,e) for (ll i = s; i >= e; --i) #define pb push_back #define fi first #define se second typedef long long ll; typedef pair<ll, ll> ii; typedef vector<ll> vi; typedef vector<ii> vii; const ll mxn = 3e5; ll ans = LLONG_MAX, dep[mxn], hdep[mxn]={}, sz[mxn], bot[mxn], k; vii neibs[mxn]; map<ll, ll> deep[mxn]; void get_depth (ll u, ll prev) { sz[u] = 1; for (ii vd : neibs[u]) { ll v = vd.fi, d = vd.se; if (v == prev) continue; dep[v] = dep[u]+d; hdep[v] = hdep[u]+1; get_depth (v, u); sz[u] += sz[v]; } } void dfs (ll u, ll prev) { ll heavy = -1, ma = 0; for (ii vd : neibs[u]) { ll v = vd.fi; if (v == prev) continue; dfs (v, u); if (sz[v] > ma) { ma = sz[v]; heavy = v; } } if (heavy==-1) { bot[u] = u; deep[u][dep[u]] = hdep[u]; return; } bot[u] = bot[heavy]; for (ii vd : neibs[u]) { ll v = vd.fi; if (v == prev || v == heavy) continue; for (ii deps : deep[bot[v]]) { ll real_dep = deps.fi, high_dep = deps.se; ll need_dep = k+2*dep[u]-real_dep; if (deep[bot[u]][need_dep]) ans = min(ans, high_dep+deep[bot[u]][need_dep]-2*hdep[u]); } for (ii deps : deep[bot[v]]) { ll real_dep = deps.fi, high_dep = deps.se; if (!deep[bot[u]][real_dep] || high_dep < deep[bot[u]][real_dep]) deep[bot[u]][real_dep] = high_dep; } } ll need_dep = k+dep[u]; if (deep[bot[u]][need_dep]) ans = min(ans, deep[bot[u]][need_dep]-hdep[u]); if (!deep[bot[u]][dep[u]] || hdep[u] < deep[bot[u]][dep[u]]) deep[bot[u]][dep[u]] = hdep[u]; } int best_path (int n, int ok, int h[][2], int l[]) { k = ok; rep (i,0,n-2) { ll a = h[i][0], b = h[i][1], c = l[i]; neibs[a].pb({b,c}), neibs[b].pb({a,c}); } get_depth(0,-1); dfs (0, -1); return (ans==LLONG_MAX?-1:ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...