比赛 |
2025.6.2 |
评测结果 |
AAAATTTTATAT |
题目名称 |
旅行者 |
最终得分 |
50 |
用户昵称 |
dream |
运行时间 |
33.297 s |
代码语言 |
C++ |
内存使用 |
17.51 MiB |
提交时间 |
2025-06-02 11:56:21 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int>PI;
const int N=100005,M=500005;
int n,m;
int hd[N],val[M],to[M],nxt[M],tot,k,s,dis[N],mk[N];
int read(){
char c;
int sum=0,f=1;
c=getchar();
while(c<'0'||c>'9'){
if(c=='-'){
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9'){
sum=sum*10+c-'0';
c=getchar();
}
return sum*f;
}
void add(int x,int y,int v){
tot++;
val[tot]=v;
to[tot]=y;
nxt[tot]=hd[x];
hd[x]=tot;
}
void dijkstra(){
priority_queue<PI,vector<PI>,greater<PI>> q;
q.push({0,s});
memset(dis,0x3f,sizeof(dis));
memset(mk,0,sizeof(mk));
dis[s]=0;
while(!q.empty()){
PI o;
o=q.top();
q.pop();
if(mk[o.second]){
continue;
}
mk[o.second]=1;
for(int i=hd[o.second];i;i=nxt[i]){
int y=to[i];
if(dis[y]>dis[o.second]+val[i]){
dis[y]=dis[o.second]+val[i];
q.push({dis[y],y});
}
}
}
}
int kk[N];
signed main(){
freopen("WAW.in","r",stdin);
freopen("WAW.out","w",stdout);
int t;
t=read();
while(t--){
tot=0;
memset(hd,0,sizeof(hd));
memset(nxt,0,sizeof(nxt));
memset(to,0,sizeof(to));
memset(val,0,sizeof(val));
n=read();
m=read();
k=read();
for(int i=1;i<=m;i++){
int x,y,v;
x=read();
y=read();
v=read();
if(x==y){
continue;
}
add(x,y,v);
}
for(int i=1;i<=k;i++){
kk[i]=read();
}
int ans=0x3f3f3f3f;
for(int i=1;i<=k;i++){
s=kk[i];
dijkstra();
for(int j=1;j<=k;j++){
if(i==j){
continue;
}
ans=min(ans,dis[kk[j]]);
}
}
cout<<ans<<"\n";
}
return 0;
}