Submission #1154969

#TimeUsernameProblemLanguageResultExecution timeMemory
1154969bronze_coderRace (IOI11_race)C++20
100 / 100
516 ms124180 KiB
#include "race.h" #include <bits/stdc++.h> using namespace std; int best_path(int n,int k,int h[][2],int l[]){ vector<vector<pair<int,int>>> adj(n); for(int i=0;i<n-1;i++){ int a = h[i][0]; int b = h[i][1]; adj[a].push_back({b,l[i]}); adj[b].push_back({a,l[i]}); } vector<int> q(1,0); vector<int> parent(n,-1); vector<int> dist(n,0); vector<long long> len(n,0); for(int i=0;i<n;i++){ int a = q[i]; for(auto j:adj[a]){ if(j.first!=parent[a]){ parent[j.first] = a; q.push_back(j.first); dist[j.first] = dist[a]+1; len[j.first] = len[a]+j.second; } } } vector<map<long long,int>> v(n); for(int i=0;i<n;i++){ v[i][len[i]] = dist[i]; } int ans = n; for(int j=n-1;j>0;j--){ int i = q[j]; int m = parent[i]; if(v[m].size()<v[i].size()){ swap(v[m],v[i]); } v[i][len[m]] = dist[m]; for(auto z:v[i]){ if(v[m].find(2*len[m]-z.first+k)!=v[m].end()){ ans = min(ans,v[m][2*len[m]-z.first+k]+z.second-2*dist[m]); } } for(auto z:v[i]){ if(v[m][z.first]==0){ v[m][z.first] = v[i][z.first]; } else{ v[m][z.first] = min(v[m][z.first],v[i][z.first]); } } } if(ans==n){ return -1; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...