# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
842256 | 2023-09-02T16:19:09 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 max_score(int N, int X, int Y, int K) { vector<ll> dist(N, INFLL); vector<vector<array<int, 2>>> adj(N); for(int i = 0; i + 1 < N; i++) { adj[U[i]].push_back({V[i], W[i]}); adj[V[i]].push_back({U[i], W[i]}); } 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++; } } return ans; }