Submission #1097230

#TimeUsernameProblemLanguageResultExecution timeMemory
1097230orcslopRace (IOI11_race)C++17
0 / 100
6 ms14424 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define all(x) begin(x), end(x) #define sz(x) (int) (x).size() #define f first #define s second #define pii pair<int, int> bool ckmin(int& a, int b){ return b < a ? a = b, true : false; } bool ckmax(int& a, int b){ return b > a ? a = b, true : false; } struct Highway{ int a, b, w; }; const int N = 2e5 + 5; int n, k, ans = 1e9; ll c[N]; int d[N]; Highway h[N]; map<int, int> mp[N]; vector<pii> adj[N]; void dfs(int node, int prev, ll sum = 0, int dist = 0){ c[node] = sum; d[node] = dist; mp[node][sum] = dist; for(auto x : adj[node]){ if(x.f == prev) continue; dfs(x.f, node, sum + x.s, dist + 1); } } void dfs2(int node, int prev){ ll t = k + 2 * c[node]; for(auto x : adj[node]){ if(x.f == prev) continue; dfs2(x.f, node); if(sz(mp[x.f]) > sz(mp[node])) { swap(mp[x.f], mp[node]); } for(auto y : mp[x.f]){ if(mp[node].count(t - y.f)){ ckmin(ans, mp[node][t - y.f] + y.s - 2 * d[node]); } } for(auto y : mp[x.f]){ if(!mp[node].count(y.f)){ mp[node][y.f] = y.s; } else{ ckmin(mp[node][y.f], y.s); } } } } int best_path(int n, int k, int edges[][2], int weights[]) { if (k == 1) { return 0; } for (int i = 0; i < n - 1; i++) { int u = edges[i][0]; int v = edges[i][1]; adj[u].pb({v, weights[i]}); adj[v].pb({u, weights[i]}); } dfs(0, -1); dfs2(0, -1); return (ans == 1e9 ? -1 : ans); } // int32_t main() { // cin.tie(0)->sync_with_stdio(0); // cin >> n >> k; // for(int i = 0; i < n - 1; i++){ // cin >> h[i].a >> h[i].b; // } // for(int i = 0; i < n - 1; i++){ // cin >> h[i].w; // } // for(int i = 0; i < n - 1; i++){ // adj[h[i].a].pb({h[i].b, h[i].w}); // adj[h[i].b].pb({h[i].a, h[i].w}); // } // dfs(0, -1); // dfs2(0, -1); // cout << (ans < 1e9 ? ans : -1) << '\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...