RT
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k;
ll d[100010];
ll ver[1001000],edge[1001000],head[1001000],nxt[1001000];
ll d1[100100],d2[100010],d3[100010],d4[100100];
ll tot;
ll v[100100];
ll g,h;
void add(ll x,ll y,ll z)
{
ver[++tot]=y,edge[tot]=z,nxt[tot]=head[x],head[x]=tot;
}
void dij1()
{
memset(v,0,sizeof(v));
memset(d1,0x3f,sizeof(d1));
priority_queue< pair<ll,ll> > q;
q.push(make_pair(0,1));
v[1]=1;
d1[1]=0;
while(!q.empty())
{
ll x=q.top().second;
q.pop();
for(int i=head[x];i;i=nxt[i])
{
ll y=ver[i],z=edge[i];
if(v[y])
continue;
v[y]=1;
if(d1[y]>d1[x]+z)
{
d1[y]=d1[x]+z;
q.push(make_pair(-d1[y],y));
}
}
}
}
void dij2()
{
memset(v,0,sizeof(v));
memset(d2,0x3f,sizeof(d2));
priority_queue< pair<ll,ll> > q;
q.push(make_pair(0,1));
v[1]=1;
d2[1]=0;
while(!q.empty())
{
ll x=q.top().second;
q.pop();
for(int i=head[x];i;i=nxt[i])
{
ll y=ver[i],z=edge[i];
if(v[y])
continue;
if(d[y])
continue;
v[y]=1;
if(d2[y]>d2[x]+z)
{
d2[y]=d2[x]+z;
q.push(make_pair(-d2[y],y));
}
}
}
}
void dij3()
{
memset(v,0,sizeof(v));
memset(d3,0x3f,sizeof(d3));
priority_queue< pair<ll,ll> > q;
q.push(make_pair(0,g));
v[g]=1;
d3[g]=0;
while(!q.empty())
{
ll x=q.top().second;
q.pop();
for(int i=head[x];i;i=nxt[i])
{
ll y=ver[i],z=edge[i];
if(v[y])
continue;
v[y]=1;
if(d3[y]>d3[x]+z)
{
d3[y]=d3[x]+z;
q.push(make_pair(-d3[y],y));
}
}
}
}
void dij4()
{
memset(v,0,sizeof(v));
memset(d4,0x3f,sizeof(d4));
priority_queue< pair<ll,ll> > q;
q.push(make_pair(0,h));
v[h]=1;
d4[h]=0;
while(!q.empty())
{
ll x=q.top().second;
q.pop();
for(int i=head[x];i;i=nxt[i])
{
ll y=ver[i],z=edge[i];
if(v[y])
continue;
v[y]=1;
if(d4[y]>d4[x]+z)
{
d4[y]=d4[x]+z;
q.push(make_pair(-d4[y],y));
}
}
}
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=k;i++)
{
ll f;
cin>>f;
d[f]=1;
}
for(int i=1;i<=m;i++)
{
ll a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
cin>>g>>h;
dij1();
dij2();
dij3();
dij4();
ll ans=min(max(d1[g],d2[h]),min(max(d1[h],d2[g]),min(max(d1[h],d4[g]),max(d1[g],d3[h]))));
cout<<ans<<endl;
}
自查好像是最短路错了,但找不到错误点,有大佬帮忙吗,谢谢