Submission #1086234

#TimeUsernameProblemLanguageResultExecution timeMemory
1086234rayan_bdRace (IOI11_race)C++17
21 / 100
3091 ms61528 KiB
#include <bits/stdc++.h> using namespace std; #define pb emplace_back const int mxN = 2e6+10; const int INF = (int)1e9; vector<pair<int,int>> adj[mxN]; int sz[mxN],N,K,ans=INF; bool ok[mxN]; vector<int> mnDist((int)1e6+50,INF); void dfs1(int node,int par){ sz[node]=0; for(auto it:adj[node]){ if(it.first==par||ok[it.first]) continue; dfs1(it.first,node); sz[node]+=sz[it.first]; } sz[node]++; } int find(int node,int par){ for(auto it:adj[node]){ if(it.first==par||ok[it.first]) continue; if(sz[it.first]>=((N+1)/2)){ return find(it.first,node); } } return node; } void dfs2(int src,int par,int dist,int h,bool f){ if(dist>K) return; if(f){ mnDist[dist]=min(mnDist[dist],h); }else{ ans=min(ans,mnDist[K-dist]+h); } for(auto it:adj[src]){ if(!ok[it.first]&&it.first!=par){ dfs2(it.first,src,dist+it.second,h+1,f); } } } void res(int u,int p,int dist){ if(dist>K) return; mnDist[dist]=INF; for(auto it:adj[u]){ if(it.first!=p&&!ok[it.first]){ res(it.first,u,dist+it.second); } } } void decompose(int u){ dfs1(u,-1); int cen=find(u,-1); mnDist[0]=0; for(auto it:adj[u]){ if(!ok[it.first]){ dfs2(it.first,u,it.second,1,0); dfs2(it.first,u,it.second,1,1); } } res(u,-1,0); ok[u]=1; for(auto it:adj[u]){ if(!ok[it.first]){ decompose(it.first); } } } int best_path(int n,int k,int h[][2],int l[]){ for(int i=0;i<n-1;++i){ adj[h[i][0]].pb(h[i][1],l[i]); adj[h[i][1]].pb(h[i][0],l[i]); } N=n,K=k; decompose(0); return ans>=INF?-1:ans; }

Compilation message (stderr)

race.cpp: In function 'void decompose(int)':
race.cpp:60:9: warning: unused variable 'cen' [-Wunused-variable]
   60 |     int cen=find(u,-1);
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...