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;
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
using ll = long long;
using ar = array<int,2>;
const int mxN = (int)3e5+10;
ll n, dis[2][mxN];
vector<pair<int,int>> adj[mxN];
void dfs(int s, int p, int t){
for(auto [u,w] : adj[s]){
if(u==p) continue;
dis[t][u] = dis[t][s]+w; dfs(u,s,t);
}
}
int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W){
n = N; int ans = 0;
for(int i = 0; i < n; i++){
adj[i].clear();
dis[0][i]=dis[1][i]=0;
}
for(int i = 0; i < n-1; i++){
auto [a,b,c] = tie(U[i],V[i],W[i]);
adj[a].pb({b,c}), adj[b].pb({a,c});
}
dfs(X,-1,0); dfs(Y,-1,1);
priority_queue<ar,vector<ar>,greater<ar>> pq;
while(sz(pq)) pq.pop();
for(int i = 0; i < n; i++){
int mn = min(dis[0][i],dis[1][i]);
int mx = max(dis[0][i],dis[1][i]);
pq.push({mn,mx});
}
while(sz(pq)){
auto [sum,mx] = pq.top(); pq.pop();
if(K<sum) break;
K-=sum; ans++;
//if(mx!=-1) pq.push({mx-sum,-1});
}
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... |