Submission #307556

#TimeUsernameProblemLanguageResultExecution timeMemory
307556amunduzbaevRace (IOI11_race)C++14
0 / 100
4 ms4992 KiB
#include "race.h" //#include "grader.cpp" #include <bits/stdc++.h> using namespace std; vector<pair<int,int>> m, v[200005]; int g[200005],used[200005],n,k; map<int ,int>len; void dfs(int vi,int p){ g[vi]++; for(int i=0;i<v[vi].size();i++){ int b=v[vi][i].first; if(used[b]||b==p)continue; dfs(b,vi); g[vi]+=g[b]; } } int centr(int u,int p,int s){ for(auto x:v[u]){ int b=x.first; if(used[b]||p==b) continue; if(g[b]>s/2) return centr(b,u,s); } return u; } void dfs1(int vi,int p,int d,int t){ if(d>k) return ; m.push_back({d,t}); for(auto x:v[vi]){ int b=x.first; int c=x.second; if(used[b]||p) continue; dfs1(b,vi,c+d,t+1); } } void dfs2(int vi,int p,int d,int t){ if(d>k) return ; if(!len.count(d)) len[d]=t; else len[d]=min(t,len[d]); m.push_back({d,t}); for(auto x:v[vi]){ int b=x.first; int c=x.second; if(used[b]||p) continue; dfs2(b,vi,c+d,t+1); } } int fans(int u,int p){ int ans=INT_MAX; len.clear(); dfs(u,u); //cout<<"works\n"; u=centr(u,u,g[u]); len[0]=0; used[u]=1; //cout<<"works\n"; for(auto x:v[u]){ m.clear(); int b=x.first,c=x.second; if(used[b]) continue; dfs1(b,u,c,1); for(auto x:m){ int d=x.first; int t=x.second;; if(len.count(k-d)){ ans=min(ans,len[k-d]+t); }//cout<<d<<" "<<t<<"\n"; } dfs2(b,u,c,1); } for( auto x : v[u]){ int b=x.first; if(used[b]||p==b) continue; ans=min(ans,fans(b,u)); } return ans; } int best_path(int N, int K, int h[][2], int l[]){ n=N,k=K; if(k==0) return 0; for(int i=0;i<n-1;i++){ v[h[i][0]].push_back({h[i][1],l[i]}); v[h[i][1]].push_back({h[i][0],l[i]}); } int ans=fans(0,-1); ans=(ans==INT_MAX ? -1:ans); cout<<ans<<" "; return ans; } /* 4 3 0 1 1 1 2 2 1 3 4 2 */

Compilation message (stderr)

race.cpp: In function 'void dfs(int, int)':
race.cpp:12:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |     for(int i=0;i<v[vi].size();i++){
      |                 ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...