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;
const int MAXN=200010;
vector<pair<int,int>> g[MAXN];
long long distX[MAXN], distY[MAXN];
void dfsx(int at, int p) {
for(auto [to,w]:g[at]) {
if(to==p)continue;
distX[to]=distX[at]+w;
dfsx(to, at);
}
}
void dfsy(int at, int p) {
for(auto [to,w]:g[at]) {
if(to==p)continue;
distY[to]=distY[at]+w;
dfsy(to, at);
}
}
int max_score(int N, int X, int Y, long long K,
std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
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]});
}
dfsx(X, -1);
dfsy(Y, -1);
int ans=0;
// case 1
{
int cnt=0;
priority_queue<long long> pq;
for(int i = 0;i<N;i++) {
pq.push(-distX[i]);
pq.push(-distY[i]);
}
long long sum=0;
while(sum<=K) {
sum-=pq.top();
cnt++;
pq.pop();
if(sum<=K)ans=max(ans,cnt);
}
}
for(int i = 0;i<=N;i++) {
distX[i]=distY[i]=0;
g[i].clear();
}
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... |