#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll INF = 1e18;
int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]) {
vector<vector<pair<int, int>>> g(n);
vector<vector<ll>> best(n, vector<ll>(2, INF));
vector<ll> dp(n);
for (int i = 0; i < m; i++) {
int u = r[i][0];
int v = r[i][1];
int w = l[i];
g[u].push_back({v, w});
g[v].push_back({u, w});
}
vector<bool> done(n, false);
priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
for (int i = 0; i < k; i++) {
dp[p[i]] = 0;
best[p[i]][0] = best[p[i]][1] = 0;
pq.push({0, p[i]});
}
while (!pq.empty()) {
int curr = pq.top().second;
pq.pop();
if (done[curr]) continue;
done[curr] = true;
dp[curr] = best[curr][1];
for (auto [next, w]: g[curr]) {
if (done[next]) continue;
ll dis = w + dp[curr];
if (dis < best[next][1]) {
if (dis <= best[next][0]) {
best[next][1] = best[next][0];
best[next][0] = dis;
}
else best[next][1] = dis;
pq.push({best[next][1], next});
}
}
}
return (int)dp[0];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |