#ifdef t9unkubj
#include"debug.cpp"
//#include"template_no_debug.h"
#else
#define dbg(...) 199958
#endif
#undef _GLIBCXX_DEBUG
#pragma GCC optimize("O3")
using namespace std;
#include<bits/stdc++.h>
using ll=long long;
using ull=unsigned long long;
template<class T>using vc=vector<T>;
template<class T>using vvc=vc<vc<T>>;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define REP(i,j,n) for(ll i=(j);i<(ll)(n);i++)
#define DREP(i,n,m) for(ll i=(n);i>=(m);i--)
#define drep(i,n) for(ll i=((n)-1);i>=0;i--)
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
template<class T,class F>
bool chmin(T &x, F y){
if(x>y){
x=y;
return true;
}
return false;
}
template<class T, class F>
bool chmax(T &x, F y){
if(x<y){
x=y;
return true;
}
return false;
}
double pass_time=0;
#include "crocodile.h"
int solve(int n,int m,vc<int>u,vc<int>v,vc<int>l,int k,vc<int>p){
vvc<pair<int,int>>g(n);
rep(i,m){
g[u[i]].push_back({v[i],l[i]});
g[v[i]].push_back({u[i],l[i]});
}
dbg(g);
vvc<ll>md(n,vc<ll>(2,2e18));
using S=array<ll,3>;
priority_queue<S,vc<S>,greater<>>que;
rep(i,k){
md[p[i]][0]=md[p[i]][1]=0;
que.push({0,p[i],0});
}
vc<int>done(n);
while(que.size()){
auto [p,q,t]=que.top();que.pop();
if(t){
if(md[q][0]>p){
md[q][1]=md[q][0];
md[q][0]=p;
if(md[q][1]<=1e9)que.push({md[q][1],q,0});
}else if(md[q][1]>p){
md[q][1]=p;
que.push({md[q][1],q,0});
}
}
if(md[q][1]!=p)continue;
if(done[q])continue;
done[q]=1;
for(auto&[to,w]:g[q]){
que.push({md[q][1]+w,to,1});
}
}
dbg(md);
ll ans=md[0][1];
return ans;
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
vc<int>u(M),v(M),l(M);
rep(i,M){
u[i]=R[i][0];
v[i]=R[i][1];
l[i]=L[i];
}
vc<int>p(K);
rep(i,K)p[i]=P[i];
return solve(N,M,u,v,l,K,p);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |