#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
#define X first
#define Y second
const int MXN = 1e5+5;
const int inf = 1e9;
vector<pii> g[MXN];
int dis[MXN];
bool mark[MXN];
set<pii> st[MXN];
priority_queue<pii> pq;
inline void add(int v) {
  if(st[v].size()>=2) pq.push({-next(st[v].begin())->X, v});
}
inline void upd(int v, int d) {
  for(auto [u, w] : g[v])
    st[u].erase({dis[v]+w, v});
  dis[v] = d;
  for(auto [u, w] : g[v])
    st[u].insert({dis[v]+w, v}),
    add(u);
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
  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]});
  }
  for(int i=0; i<N; i++) upd(i, inf);
  for(int i=0; i<K; i++) upd(P[i], 0), mark[P[i]] = 1;
  while(!pq.empty()) {
    int d = -pq.top().X;
    int v = pq.top().Y;
    pq.pop();
    if(mark[v]) continue;
    upd(v, d);
    mark[v] = 1;
  }
  return dis[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... |