Submission #788776

#TimeUsernameProblemLanguageResultExecution timeMemory
788776vjudge1경주 (Race) (IOI11_race)C++17
100 / 100
428 ms54880 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define ii pair<int,int> const int ms = 2e5 + 10; ll dis[ms], ans, k, n, sz[ms], h[ms]; vector<ii> g[ms]; map<ll, ll> mp; void insere(int u){ if(mp.find(dis[u]) != mp.end()) mp[dis[u]] = min(mp[dis[u]], h[u]); else mp[dis[u]] = h[u]; } void put(int u, int p){ insere(u); for(auto [v, w] : g[u]){ if(v == p) continue; put(v, u); } } void qry(int u, int p, int q){ if(mp.find(2ll*dis[q] - dis[u] + k) != mp.end()){ ll now = mp[2ll*dis[q] - dis[u] + k] + h[u] - 2*h[q]; if(ans == -1 || ans > now) ans = now; } for(auto [v, w] : g[u]){ if(v == p) continue; qry(v, u, q); } } void dfs(int u=0, int p=-1, bool keep = false){ int big = -1; for(auto [v, w] : g[u]){ if(v == p) continue; if(big == -1 || sz[big] < sz[v]) big = v; } for(auto [v, w] : g[u]){ if(v == p || v == big) continue; dfs(v, u, false); } if(big != -1) dfs(big, u, true); if(mp.find(2ll*dis[u] - dis[u] + k) != mp.end()){ ll now = mp[2ll*dis[u] - dis[u] + k] + h[u] - 2*h[u]; if(ans == -1 || ans > now) ans = now; } insere(u); for(auto [v, w] : g[u]){ if(v == p || v == big) continue; qry(v, u, u); put(v, u); } if(!keep) mp.clear(); } int getSz(int u=0, int p=-1, ll d=0, int height =0){ sz[u] = 1; h[u] = height; dis[u] = d; for(auto [v, w] : g[u]){ if(v == p) continue; sz[u] += getSz(v, u, d+w, height +1); } return sz[u]; } int best_path(int N, int K, int H[][2], int L[]){ k = K; n = N; for(int i=0; i<n-1; i++){ g[H[i][0]].push_back({H[i][1], L[i]}); g[H[i][1]].push_back({H[i][0], L[i]}); } ans = -1; getSz(); dfs(); return ans; } // signed main(){ // cin.tie(0); // ios::sync_with_stdio(0); // cin >> n >> k; // for(int i=1; i<n; i++){ // int a, b, w; // cin >>a >> b >> w; // g[a].push_back(ii(b, w)); // g[b].push_back(ii(a, w)); // } // ans = -1; // getSz(); // dfs(); // cout << ans << endl; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...