# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
842253 | 2023-09-02T16:16:17 Z | omeganot | Closing Time (IOI23_closing) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; using ll = long long; const int MOD = 1E9 + 7; const int INF = 1E9; const ll INFLL = 1E18; const int MAX = 2E5; int N; int X; int Y; int K; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int C; cin >> C; for(int test = 1; test <= C; test++) { cin >> N >> X >> Y >> K; vector<ll> dist(N, INFLL); vector<vector<array<int, 2>>> adj(N); for(int i = 0; i + 1 < N; i++) { int U; int V; int W; cin >> U >> V >> W; U--; V--; adj[U].push_back({V, W}); adj[V].push_back({U, W}); } dist[X] = 0; dist[Y] = 0; priority_queue<array<ll, 2>, vector<array<ll, 2>>, greater<array<ll, 2>>> pq; pq.push({0, X}); pq.push({0, Y}); while(pq.size()) { array<ll, 2> x = pq.top(); if(x[0] != dist[x[1]]) { continue; } for(array<int, 2> i : adj[x[1]]) { if(dist[i[0]] > dist[x[1]] + i[1]) { dist[i[0]] = dist[x[1]] + i[1]; pq.push({dist[i[0]], i[0]}); } } } sort(dist.begin(), dist.end()); int ans = 0; ll sum = 0; for(ll i : dist) { if(sum + i <= K) { sum += i; ans++; } } cout << ans << "\n"; } }