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;
#define ss second
#define ff first
#define pb push_back
#define mk make_pair
#define mt make_tuple
#define all(x) (x).begin(), (x).end()
ll cost[2][3100];
vector<pair<ll,ll> > v[3400];
void go(int cr,ll ds,int pr,int f){
cost[f][cr]=ds;
for(auto u:v[cr]){
if(u.ff==pr)continue;
go(u.ff,ds+u.ss,cr,f);
}
}
ll dp[3010][6010];
int n;
ll solve(int cr,int rem){
if(rem==0)return 0;
if(cr>=n){
return 2e18;
}
ll &ret=dp[cr][rem];
if(ret!=-1)return ret;
ret=3e18;
ret=min(ret,solve(cr+1,rem));
ret=min(ret,solve(cr+1,rem-1)+min(cost[0][cr],cost[1][cr]));
ret=min(ret,solve(cr+1,rem-2)+max(cost[0][cr],cost[1][cr]));
return ret;
}
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;
for(int i=0;i<N-1;i++){
v[U[i]].pb({V[i],W[i]});
v[V[i]].pb({U[i],W[i]});
}
go(X,0,-1,0);
go(Y,0,-1,1);
memset(dp,-1,sizeof dp);
int maxS=0;
for(int i=0;i<=n*2;i++){
if(solve(0,i)<=K){
maxS=i;
}
}
return maxS;
}
# | 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... |