#include<bits/stdc++.h>
#define inf 0x7ffffff
using namespace std;
struct Edge {int to,nxt,val;}
edge[114514];
struct node {
int dis,pos;
bool operator<(const node &other) const {
return other.dis<dis;
}
};
priority_queue<node> q[1145];
node tmp;
int p,f,c,u,v,w,cnt;
int dis,pos,child,tot;
int ansm,ansi;
int Dis[505][114514],vis[505][114514];
int head[114514];
int F[114514];
bool check[114514];
void add(int u,int v,int w) {
cnt++;
edge[cnt].to=head[u];
edge[cnt].nxt=u;
edge[cnt].val=w;
head[u]=cnt;
}
void Dijkstra(int s) {
Dis[s][s]=0;
q[s].push({0,s});
while(!q[s].empty()) {
tmp=q[s].top(),q[s].pop();
pos=tmp.pos,dis=tmp.dis;
if (vis[s][pos]) continue;
vis[s][pos]=1;
cout<<pos<<endl;
for(int i=head[pos];i!=0;i=edge[i].nxt) {
child=edge[i].to;
cout<<Dis[s][child]<<endl;
if (Dis[s][child]>Dis[s][pos]+edge[i].val) {
Dis[s][child]=Dis[s][pos]+edge[i].val;
if (vis[s][child]==0)
q[s].push((node){Dis[s][child],child});
}
}
}
}
int main()
{
cin>>p>>f>>c;
for(int i=0;i<f;i++) {
cin>>F[i];
check[F[i]]=1;
}
for(int i=0;i<p;i++) {
for(int j=0;j<p;j++) {
Dis[i][j]=inf;
}
}
for(int i=0;i<c;i++) {
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
ansm=inf;
for(int i=1;i<=p;i++) {
if (check[i]) continue;
Dijkstra(i);
//cout<<1<<endl;
for(int j=0;j<f;j++) {
tot+=Dis[i][F[i]];
}
if (tot<ansm) {
ansi=i;
ansm=tot;
}
}
cout<<ansi;
}
一直循环,输出不了。。