이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "closing.h"
#include <bits/stdc++.h>
#include <functional>
#include <queue>
#define ll long long
#define ff first
#define ss second
#define ln endl
using namespace std;
vector<vector<int>> A;
ll n, x, y, k;
vector<pair<ll, pair<ll, ll>>> edge;
ll dijkstra(){
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> que;
que.push({0, x});
que.push({0, y});
vector<bool> reachable(n, 0);
while (!que.empty()){
auto cur = que.top();
que.pop();
if (reachable[cur.ss] or k<cur.ff){
continue;
}
// cout << cur.ss << ln;
reachable[cur.ss]=1;
k-=cur.ff;
for (auto i:A[cur.ss]){
auto v = edge[i].ss.ff^edge[i].ss.ss^cur.ss;
if (reachable[v] or cur.ff+edge[i].ff>k) continue;
que.push({cur.ff+edge[i].ff, v});
}
}
ll ans=0;
for (ll i=0; i<n; i++) {
if (reachable[i]) {
// cout << i << ln;
ans++;
}
}
return ans;
}
int max_score(int N, int X, int Y, long long K,
std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
A.resize(N);
n=N; x=X; y=Y; k=K;
for (ll i=0; i<n-1; i++){
A[U[i]].push_back(i);
A[V[i]].push_back(i);
edge.push_back({W[i],{V[i], U[i]}});
}
return dijkstra();
}
# | 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... |