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 <vector>
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll big = 2e18;
struct line{
ll i,w;
};
int max_score(int N, int X, int Y, long long K,
std::vector<int> U, std::vector<int> V, std::vector<int> W){
ll n = N;
ll x = X;
ll y = Y;
ll k = K;
vector<vector<line>> con(n);
for(ll i = 0;i<n-1;i++){
con[U[i]].push_back({V[i],W[i]});
con[V[i]].push_back({U[i],W[i]});
}
vector<ll> dis1(n,big),dis2(n,big);
{
function<void(ll,ll)> dfs;
dfs = [&](ll i, ll v){
if(dis1[i]>v){
dis1[i] = v;
for(auto [j,w] : con[i]){
dfs(j,v+w);
}
}
};
dfs(x,0);
}
{
function<void(ll,ll)> dfs;
dfs = [&](ll i, ll v){
if(dis2[i]>v){
dis2[i] = v;
for(auto [j,w] : con[i]){
dfs(j,v+w);
}
}
};
dfs(y,0);
}
ll l = 0, r = big;
while(l<r){
ll m = l+r+1>>1;
ll sm = 0;
for(ll i = 0;i<n;i++){
ll mi = min(dis1[i],dis2[i]);
ll mx = max(dis1[i],dis2[i]);
if(m>=mx) sm+=mx;
else if(m>=mi) sm+=mi;
}
if(sm>k) r = m-1;
else l = m;
}
ll cur = 0, ans = 0;
vector<ll> v;
for(ll i = 0;i<n;i++){
ll mi = min(dis1[i],dis2[i]);
ll mx = max(dis1[i],dis2[i]);
if (mx<=l){
cur += mx;
ans += 2;
}else if (mi<=l){
cur += mi;
ans += 1;
if (mx==l+1){
v.push_back(mx-mi);
}
}else if(mi==l+1){
v.push_back(mi);
}
}
sort(v.begin(),v.end());
for(ll i : v){
if(cur+i<=k){
ans += 1;
cur += i;
}
}
return ans;
}
Compilation message (stderr)
closing.cpp: In function 'int max_score(int, int, int, long long int, std::vector<int>, std::vector<int>, std::vector<int>)':
closing.cpp:49:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
49 | ll m = l+r+1>>1;
| ~~~^~
# | 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... |