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;
vector<pair<int,int>>adj[200100];
vector<long long>v;
void dfs(int n,int p,long long d){
v.push_back(d);
for(auto[i,w]:adj[n])
if(i-p)dfs(i,n,d+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){
vector<long long>pos(N);
for(int i=1;i<N;i++)
pos[i]=pos[i-1]+W[i-1];
for(int i=0;i<N-1;i++)
adj[U[i]].push_back({V[i],W[i]}),
adj[V[i]].push_back({U[i],W[i]});
v.clear();
dfs(X,N,0);
dfs(Y,N,0);
sort(v.rbegin(),v.rend());
long long origK=K;
while(v.size())
if(v.back()<=K)
K-=v.back(),
v.pop_back();
else break;
for(int i=0;i<N;i++)
adj[i].clear();
K=origK;
int ans1=2*N-v.size();
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<>> pq;
int ans2=0;
for(int i=X;i<Y;i++){
int A=pos[i]-pos[X];
int B=pos[Y]-pos[i];
K-=min(A,B);ans2++;
pq.push({max(B,A)-min(A,B),1});
}
for(int i=0;i<X;i++)
pq.push({pos[X]-pos[i],0});
for(int i=Y;i<N;i++)
pq.push({pos[i]-pos[Y],0});
if(K<0)
ans2=0;
while(pq.size()){ auto[a,b]=pq.top();
if(a>K)break;K-=a;pq.pop();ans2++;
if(!b)pq.push({pos[Y]-pos[X],1});
}
return max(ans1,ans2);
}
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:47:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
47 | if(a>K)break;K-=a;pq.pop();ans2++;
| ^~
closing.cpp:47:22: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
47 | if(a>K)break;K-=a;pq.pop();ans2++;
| ^
# | 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... |