比赛 |
NOIP2023模拟赛2 |
评测结果 |
WWEEEEEEEE |
题目名称 |
旅行者 |
最终得分 |
0 |
用户昵称 |
宇战 |
运行时间 |
1.550 s |
代码语言 |
C++ |
内存使用 |
9.71 MiB |
提交时间 |
2023-11-14 11:39:25 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=5010;
int head[M],ver[M],edge[M],Next[M],tot,a[N],d[N][N],v[N];
int n,m,s,k;
priority_queue<pair<int,int> >q;
void add(int x,int y,int z){
ver[++tot]=y;
edge[tot]=z;
Next[tot]=head[x];
head[x]=tot;
}
void dj(int x){
for(int i=1;i<=n;i++){
d[x][i]=0x3f3f3f3f;
}
memset(v,0,sizeof(v));
d[x][x]=0;
q.push(make_pair(0,x));
while(q.size()){
int y=q.top().second;
q.pop();
if(v[y])continue;
v[y]=1;
for(int i=head[y];i;i=Next[i]){
int x1=ver[i],x2=edge[i];
if(d[x][x1]>d[x][y]+x2){
d[x][x1]=d[x][y]+x2;
q.push(make_pair(-d[x][x1],x1));
}
}
}
}
int main(){
freopen("WAW.in","r",stdin);
freopen("WAW.out","w",stdout);
int t;
cin>>t;
while(t--){
tot=0;
memset(head,0,sizeof(head));
memset(ver,0,sizeof(ver));
memset(edge,0x3f,sizeof(edge));
memset(Next,0,sizeof(Next));
memset(a,0,sizeof(a));
s=0x3f3f3f3f;
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}
for(int i=1;i<=k;i++){
cin>>a[i];
dj(a[i]);
}
for(int i=1;i<=k;i++){
for(int j=1;j<=k;j++){
if(i==j)continue;
if(d[i][j]!=0&&d[i][j]!=0x3f3f3f3f){
s=min(d[i][j],s);
}
if(d[j][i]!=0&&d[j][i]!=0x3f3f3f3f){
s=min(d[j][i],s);
}
}
}
cout<<s<<endl;
}
}