This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
#define ll int
template<typename T>
int len(T &a){return a.size();}
const int inf = 1e9 + 1;
const ll infl = 1e9;
#define ss second
#define ff first
#define all(a) (a).begin(), (a).end()
int travel_plan(int n, int m, int r[][2], int L[], int K, int P[])
{
  vector<vector<pair<int,int>>> g(n);
  //cout << "done" << endl;
  for(int i = 0; i < m; i ++){
    g[r[i][0]].push_back({r[i][1], L[i]});
    g[r[i][1]].push_back({r[i][0], L[i]});
  }
  
  vector<pair<ll, ll>> dis(n, {infl, infl});
  priority_queue<pair<ll, int>> q;
  for(int i = 0; i < K; i ++){
    q.push({0, P[i]});
    dis[P[i]] = {0, 0};
  }
  vector<int> vis(n);
  while(!q.empty()){
    int t = q.top().ss;
    q.pop();
    if(vis[t]) continue;
    vis[t] = 1;
    for(auto [u, w] : g[t]){
      if(dis[u].ff > dis[t].ss + w){
        dis[u].ss = dis[u].ff;
        q.push({-dis[u].ss, u});
        dis[u].ff = dis[t].ss + w;
      }else if(dis[u].ss > dis[t].ss + w){
        dis[u].ss = dis[t].ss + w;
        q.push({-dis[u].ss, u});
      }
    }
  }
  return dis[0].ss;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |