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