#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll INF = 1e18;
int n, m;
vector<vector<pair<int, int>>> g;
vector<ll> dp;
vector<vector<ll>> best;
int travel_plan(int N, int M, int r[][2], int l[], int k, int p[]) {
    n = N;
    m = M;
    g.clear();
    g.resize(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});
    }
    dp.assign(n, INF);
    best.assign(n, vector<ll>(2, INF));
    vector<bool> done(n, false);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, 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], dis});
        }
    }
    return 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... |