比赛 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;
}