Submission #957434

#TimeUsernameProblemLanguageResultExecution timeMemory
957434Haidara314Race (IOI11_race)C++17
100 / 100
387 ms81748 KiB
#include "race.h" #include <bits/stdc++.h> #define ll long long #define F first #define S second using namespace std; int ans=1e9; ll k; vector<pair<int,ll>>adj[200005]; ll dep[200005]; int dis[200005]; map<int,int> arr[200005]; void dfs(int u,int p) { for(auto x:adj[u]) { if(x.F!=p) { dep[x.F]=dep[u]+x.S; dis[x.F]=dis[u]+1; dfs(x.F,u); if(arr[x.F].size()>arr[u].size()) swap(arr[x.F],arr[u]); for(auto f:arr[x.F]) { int z=2*dep[u]+k-f.F; if(arr[u].count(z)) { ans=min(ans,arr[u][z]+f.S-2*dis[u]); } } for(auto g:arr[x.F]) { if(arr[u][g.F]) arr[u][g.F]=min(arr[u][g.F],g.S); else arr[u][g.F]=g.S; } } } if(arr[u].count(dep[u]+k)) ans=min(ans,arr[u][dep[u]+k]-dis[u]); arr[u][dep[u]]=dis[u]; } int best_path(int N, int K, int H[][2], int L[]) { k=K; for(int i=0;i<N-1;i++) { adj[H[i][0]].push_back({H[i][1], L[i]}); adj[H[i][1]].push_back({H[i][0], L[i]}); } dfs(0,0); if(ans==1e9) ans=-1; return 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...