rt。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define endl '\n'
#define inf 0x3f3f3f3f
#define MAXN 855
#define MAXM 2905
#define M(x,y) make_pair(x,y)
int n,m,k;
int tot,u,v,w,s;
int fr[MAXN],to[MAXM],nex[MAXM],val[MAXM],dis[MAXN];
int con[MAXN],ans=inf;
bool vis[MAXN];
inline void add(int x,int y,int z) {to[++tot]=y;val[tot]=z;nex[tot]=fr[x];fr[x]=tot;}
priority_queue<pair<int,int> >q;
inline int dijkstra() {
memset(vis,false,sizeof(vis));
for (re int i=1;i<=n;i++) dis[i]=inf;
dis[s]=0;vis[s]=true;
q.push(M(0,s));
while (!q.empty()) {
int x=q.top().second;q.pop();
if (vis[x]) continue;
vis[x]=true;
for (re int i=fr[x];i;i=nex[i]) {
int y=to[i],z=val[i];
if (dis[x]+z<dis[y]) {dis[y]=dis[x]+z;q.push(M(-dis[y],y));}
}
}
int sum=0;
for (re int i=1;i<=n;i++) sum+=dis[i]*con[i];
return sum;
}
int main() {
scanf("%d%d%d",&k,&n,&m);
for (re int i=1;i<=k;i++) {scanf("%d",&u);con[u]++;}
while (m--) {
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);add(v,u,w);
}
for (re int i=1;i<=n;i++) {
//int hh=dijkstra();
s=i;if (con[i]) ans=min(ans,hh);
//cout<<hh<<endl;
}
cout<<ans<<endl;
return 0;
}
本应输出 8,结果输出了 9……