#include "closing.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define maxn 200005
using namespace std;
using ii = pair<int, int>;
int n, x, y; int64_t k;
struct edge {
int u, v, l;
edge() {}
edge(int _u, int _v, int _l) : u(_u), v(_v), l(_l) {}
} edges[maxn];
vector<ii> adj[maxn];
int64_t kc[maxn];
int solve() {
int ans = 0;
for (int i = 0; i < n-1; i++) {
auto [u, v, l] = edges[i];
adj[u].emplace_back(v, l);
adj[v].emplace_back(u, l);
}
for (int i = 0; i < n; i++) kc[i] = LLONG_MAX;
kc[x] = kc[y] = 0;
set<pair<int64_t, int> > q;
q.insert({0, x}); q.insert({0, y});
int64_t cr = 0;
while (!q.empty()) {
auto [D, u] = *q.begin(); q.erase(q.begin());
cr += D;
if (cr > k) break;
++ans;
for (auto [v, l] : adj[u]) {
if (kc[v] > kc[u] + l) {
q.erase({kc[v], v});
kc[v] = kc[u] + l;
q.insert({kc[v], v});
}
}
}
return ans;
}
int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) {
n = N; x = X; y = Y; k = K;
for (int i = 0; i < n-1; i++) edges[i] = edge(U[i], V[i], W[i]);
int ANS = solve();
for (int i = 0; i < n; i++) adj[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... |