比赛 |
NOIP2023模拟赛2 |
评测结果 |
AAAAAAAAAA |
题目名称 |
旅行者 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
运行时间 |
2.069 s |
代码语言 |
C++ |
内存使用 |
11.50 MiB |
提交时间 |
2023-11-14 12:31:25 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+9,maxm=5e5+9;
struct edge{
int to,next,w;
}e[500010];
int cnt,last[100010];
inline void add(int u,int v,int w){
e[++cnt].to=v;
e[cnt].next=last[u];
last[u]=cnt;
e[cnt].w=w;
}
long long dis[maxn];
struct node{
int u;
long long d;
bool operator < (const node &rhs) const{
return d>rhs.d;
}
};
priority_queue<node> q;
bitset<maxn> vis,fl;
int n,m,k;
long long dij(int st){
while(!q.empty()){
q.pop();
}
vis.reset();
memset(dis,0x3f,sizeof(dis));
q.push((node){st,0});dis[st]=0;
while(!q.empty()){
node fi=q.top();
q.pop();
int u=fi.u;
if(fl[u]&&u!=st){
return dis[u];
}
if(!vis[u]){
vis[u]=1;
for(int i=last[u];i;i=e[i].next){
int v=e[i].to,w=e[i].w;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push((node){v,dis[v]});
}
}
}
}
return 0x3f3f3f3f3f3f3f3f;
}
int main(){
freopen("WAW.in","r",stdin);
freopen("WAW.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
while(T--){
cnt=0;
memset(last,0,sizeof(last));
fl.reset();
cin>>n>>m>>k;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
add(u,v,w);
}
for(int i=1,u;i<=k;i++){
cin>>u;
fl[u]=1;
}
long long ans=0x3f3f3f3f3f3f3f3f;
for(int i=1;i<=n;i++){
if(fl[i]){
ans=min(dij(i),ans);
}
}
cout<<ans<<endl;
}
return 0;
}