제출 #126426

#제출 시각아이디문제언어결과실행 시간메모리
126426jaaguptamme경주 (Race) (IOI11_race)C++14
0 / 100
6 ms5112 KiB
#include <bits/stdc++.h> #define pii pair<int,int> #include "race.h" using namespace std; const int N=200005; vector<pii>g[N]; map<int,int>*mp[N]; int dist[N],sz[N],dep[N]; int res=INT_MAX; int k; void dfs(int u,int prev){ sz[u]=1; int mxsz=-1,mxn=-1; for(auto el:g[u]){ int v=el.first; int c=el.second; if(v==prev)continue; dist[v]=dist[u]+c; dep[v]=dep[u]+1; dfs(v,u); sz[u]+=sz[v]; if(sz[v]>mxsz){ mxsz=sz[v]; mxn=v; } } if(mxsz!=-1)mp[u]=mp[mxn]; else mp[u]=new map<int,int>(); (*mp[u])[dist[u]]=dep[u]; if((*mp[u]).count(dist[u]-k)){ int node=(*mp[u])[dist[u]-k]; res=min(res,abs(node-dep[u])); } for(auto E:g[u]){ int v=E.first; if(v==prev ||v==mxn)continue; for(auto el:(*mp[v])){ int nx=el.first; int de=el.second; if((*mp[u]).count(nx-k)){ int node=(*mp[u])[nx-k]; res=min(res,abs(de-dep[u])+abs(dep[u]-node)); } if((*mp[u]).count(nx)){ (*mp[u])[nx]=min((*mp[u])[nx],de); }else (*mp[u])[nx]=de; } } } int best_path(int N, int K, int H[][2], int L[]) { k=K; for(int i=0;i<N-1;i++){ int u,v,c;u=H[i][0]; v=H[i][1]; c=L[i]; g[u].push_back({v,c}); g[v].push_back({u,c}); } dep[1]=0; dfs(1,N); return res; } /* int main(){ int n=4; int k=3; int h[][2]={{0,1},{1,2},{1,3}}; int l[]={1,2,4}; std::cout<<best_path(n,k,h,l)<<'\n'; } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...