Submission #875652

#TimeUsernameProblemLanguageResultExecution timeMemory
875652Huseyn123Race (IOI11_race)C++17
100 / 100
339 ms94268 KiB
#include "race.h" #include <bits/stdc++.h> #define MAX 200001 #define INF INT_MAX using namespace std; multiset<pair<int,int>> a[MAX]; int k; vector<int> dist; vector<int> dep; vector<vector<pair<int,int>>> g; int res=INF; void dfs(int v,int prev){ a[v].insert(make_pair(dist[v],dep[v])); for(auto x:g[v]){ if(x.first==prev){ continue; } dist[x.first]=dist[v]+x.second; dep[x.first]=dep[v]+1; dfs(x.first,v); if(a[v].size()<a[x.first].size()){ swap(a[v],a[x.first]); } for(auto y:a[x.first]){ auto it=a[v].lower_bound(make_pair(k+2*dist[v]-y.first,0)); if(it!=a[v].end() && (*it).first==k+2*dist[v]-y.first){ res=min(res,(*it).second+y.second-2*dep[v]); } } for(auto y:a[x.first]){ a[v].insert(y); } } } int best_path(int N, int K, int H[][2], int L[]) { k=K; g.resize(N+1); dist.resize(N+1,0); dep.resize(N+1,0); for(int i=0;i<N-1;i++){ g[H[i][0]].push_back(make_pair(H[i][1],L[i])); g[H[i][1]].push_back(make_pair(H[i][0],L[i])); } dfs(0,-1); if(res==INF){ res=-1; } return res; } /* int main(){ int n,k; cin >> n >> k; int h[n-1][2]; int 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 << "h" << " " << 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...