Submission #305039

#TimeUsernameProblemLanguageResultExecution timeMemory
305039vipghn2003Race (IOI11_race)C++14
100 / 100
567 ms83192 KiB
#include<bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> using namespace std; const int N=2e5+5; int res,k; map<int,int>mp[N]; vector<pii>adj[N]; void dfs(int u,int p=-1,int h=0,int w=0) { mp[u][w]=h; int tmp=u; for(auto&to:adj[u]) { int v=to.fi; if(v==p) continue; dfs(v,tmp,h+1,w+to.se); if(mp[u].size()<mp[v].size()) swap(mp[u],mp[v]); for(auto&x:mp[v]) { if(mp[u].count(k+2*w-x.fi)) { res=min(res,x.se+mp[u][k+2*w-x.fi]-2*h); } } for(auto&x:mp[v]) { if(!mp[u].count(x.fi)||mp[u][x.fi]>x.se) mp[u][x.fi]=x.se; } } } int best_path(int n,int nk,int h[][2],int l[]) { k=nk; for(int i=0;i<n-1;i++) { adj[h[i][0]].push_back(make_pair(h[i][1],l[i])); adj[h[i][1]].push_back(make_pair(h[i][0],l[i])); } res=1e9; dfs(0); if(res==1e9) res=-1; return res; } /* int main() { int n,k; cin>>n>>k; int h[n][2],l[n]; for(int i=0;i<n-1;i++) cin>>h[i][0]>>h[i][1]; for(int i=0;i<n-1;i++) cin>>l[i]; cout<<best_path(n,k,h,l); } 4 3 0 1 1 2 1 3 1 2 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...