#include "closing.h"
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
using namespace std;
const ll N = 2e5 + 5;
vector<pair<ll, ll>> g[N];
void dfs(ll v, ll par, vector<ll> &depth)
{
for (auto [to, w] : g[v])
if (to != par)
{
depth[to] = depth[v] + w;
dfs(to, v, depth);
}
}
ll n;
int max_score(int N, int X, int Y, long long k,
std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
n = N;
for (ll i = 0; i < n; i++) g[i].clear();
for (ll i = 0; i + 1 < n; i++) g[U[i]].push_back(make_pair(V[i], W[i])), g[V[i]].push_back(make_pair(U[i], W[i]));
vector<ll> a(n), b(n);
dfs(X, 0, a);
dfs(Y, 0, b);
sort(a.begin(), a.end());
sort(b.begin(), b.end());
ll ans = 0, ptr = n - 1, sum = 0;
for (ll i = 0; i < n; i++) sum += b[i];
if (sum <= k) ans = max(ans, n);
for (ll i = 0; i < n; i++)
{
sum += a[i];
while (ptr >= 0 and sum > k) sum -= b[ptr--];
if (sum <= k) ans = max(ans, ptr + 1 + i + 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... |