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;
using ll = long long;
int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W){
vector<vector<array<int, 2>>> g(N);
vector c(2, vector<ll>(N));
for(int i=0; i<N-1; i++){
g[U[i]].push_back({V[i], W[i]});
g[V[i]].push_back({U[i], W[i]});
}
function<void(int, int, vector<ll>&)> dfs = [&](int u, int p, vector<ll> &c){
for(auto [v, cost]:g[u]){
if(v==p){
continue;
}
c[v]+=c[u] + cost;
dfs(v, u, c);
}
};
dfs(X, -1, c[0]);
dfs(Y, -1, c[1]);
int ans = 0;
vector vis(2, vector<int>(N));
priority_queue<array<ll, 3>, vector<array<ll, 3>>, greater<array<ll, 3>>> pq;
// (cost, node, start x or y)
pq.push({0, X, 0});
pq.push({0, Y, 1});
while(pq.size()){
auto [cost, u, start] = pq.top();
pq.pop();
if(vis[start][u]){
continue;
}
vis[start][u]=1;
if(K<cost){
break;
}
cerr << u << " " << cost << " " << start << endl;
ans++;
K-=cost;
for(auto [v, _]:g[u]){
pq.push({c[start][v], v, start});
}
}
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... |