Submission #1076637

#TimeUsernameProblemLanguageResultExecution timeMemory
1076637rayan_bd경주 (Race) (IOI11_race)C++17
21 / 100
3066 ms96084 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define ll long long const int mxN = 2e5+10; const ll INF = (int)1e9; vector<pair<ll,ll>> adj[mxN]; ll sz[mxN],mnDist[(int)1e7],N,K,ans=INF; bool ok[mxN]; void dfs1(ll node,ll 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]++; } ll find(ll node,ll 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(ll src,ll par,ll dist,ll 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(ll u,ll p,ll 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(ll u){ dfs1(u,-1); ll 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[]){ memset(mnDist,0x3f,sizeof(mnDist)); for(ll 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(long long int)':
race.cpp:61:8: warning: unused variable 'cen' [-Wunused-variable]
   61 |     ll 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...