This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<vector<pair<int,ll>>> ad;
vector<ll> on_path, dist, prv;
int n;
void dfs(int v, int p){
for(auto [u, w]: ad[v]){
if(u == p) continue;
prv[u] = v;
dist[u] = dist[v]+w;
dfs(u, v);
}
}
int greedy(ll k, int s1, int s2){
priority_queue<array<ll, 3>, vector<array<ll, 3>>, greater<>> pq;
pq.push({0, s1, -1}); pq.push({0, s2, -1});
int ct = 0;
while(pq.size()){
auto [c, v, prv] = pq.top(); pq.pop();
if(k-c < 0) return ct;
k -= c; ct++;
for(auto [u, w]: ad[v]){
if(u == prv) continue;
pq.push({c+w, u, v});
}
}
return ct;
}
int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
n = N;
ad.assign(N, vector<pair<int,ll>>());
for(int i=0; i<N-1; i++){
ad[U[i]].push_back({V[i], W[i]});
ad[V[i]].push_back({U[i], W[i]});
}
dist.assign(n, 0); prv.assign(n, -1); on_path.assign(n, 0);
dfs(X, -1);
int curr = Y, path_sz = 0;
while(curr != -1){
on_path[curr] = 1; path_sz++;
curr = prv[curr];
}
vector<ll> distX = dist;
dist.assign(n, 0); dfs(Y, -1);
vector<ll> distY = dist;
int ans = greedy(K, X, Y);
if(distX[Y] > K*2) return ans;
vector dp(n+1, vector<ll>(2*n+1, 1e18+1));
dp[0][path_sz] = 0;
for(int i=0; i<n; i++){
if(!on_path[i]) continue;
dp[0][path_sz] += min(distX[i], distY[i]);
}
for(int i=0; i<n; i++){
dp[i+1] = dp[i];
if(!on_path[i]){
ll d1 = min(distX[i], distY[i]), d2 = max(distX[i], distY[i]);
for(int j=0; j<2*n; j++){
dp[i+1][j+1] = min(dp[i+1][j+1], dp[i][j] + d1);
if(j+2 < 2*n+1) dp[i+1][j+2] = min(dp[i+1][j+2], dp[i][j] + d2);
}
}
else{
ll d = abs(distX[i] - distY[i]);
for(int j=0; j<2*n; j++){
dp[i+1][j+1] = min(dp[i+1][j+1], dp[i][j] + d);
}
}
}
for(int i=0; i<2*n+1; i++){
if(dp[n][i] <= K) ans = max(ans, i);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |