//dij
#include<stdio.h> #include<string.h>
#include<queue>
using namespace std;
#define inf 0x3f3f3f3f
#define min(x,y) (x<y?x:y) int N,M,P,Q;
int city[],dist[],cost[][];
bool vis[]; void dij(){
for(int i=;i<=M;i++){
dist[i]=inf;
}
dist[Q]=;
memset(vis,false,sizeof(vis));
for(int i=;i<=M;i++){
int mmin=inf,pre=-;
for(int j=;j<=M;j++){
if(!vis[j]&&dist[j]<mmin){
mmin=dist[j];
pre=j;
}
}
vis[pre]=true;
for(int j=;j<=M;j++){
if(cost[pre][j]==){
continue;
}
if(!vis[j]&&cost[pre][j]+dist[pre]<dist[j]){
dist[j]=cost[pre][j]+dist[pre];
}
}
}
} int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&N,&M,&P,&Q);
for(int i=;i<N;i++){
scanf("%d",&city[i]);
}
memset(cost,,sizeof(cost));
for(int i=;i<P;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(cost[a][b]==){
cost[a][b]=cost[b][a]=c;
continue;
}
cost[a][b]=cost[b][a]=min(cost[a][b],c);
}
dij();
int ans=dist[city[]];
for(int i=;i<N;i++){
ans=min(ans,dist[city[i]]);
}
printf("%d\n",ans);
}
}

最新文章

  1. backbone库学习-model
  2. r0遍历系统进程方法总结
  3. mysql 主从复制 实践
  4. 用Xshell访问 虚拟机里的kali
  5. CodeForces 705C Thor (模拟+STL)
  6. POI Excel导出样式设置
  7. form表单中method的get和post区别
  8. 收藏一个匹配html内容的文章
  9. C#中的反射原理及应用(转)
  10. setsockopt()用法(参数详细说明)(转)
  11. IO 模型 IO 多路复用
  12. STM32F103/429串口IAP+Ymodem升级
  13. AJAX-快速上手(四个步骤)
  14. Java将Excel解析为数组集合
  15. Spring boot 源码分析(前言)
  16. C# WinForm 多线程 应用程序退出的方法 结束子线程
  17. day5_函数_文件读写_用一个函数来满足文件的读或者写_应用默认参数
  18. 关于Element UI中页面样式小问题
  19. WDlinux 修改后台默认8080端口的方法
  20. 打印lua中全局变量的一段代码

热门文章

  1. 一起使用Python里for循环和dictionary字典
  2. mysql表时间戳字段设置
  3. filters和scope在ElasticSearch Faceting模块的应用
  4. 构建HBase二级索引
  5. 微信小程序——页面跳转传值
  6. 转:linux进程间通信的几种机制的比较及适用场合
  7. PAT甲级——A1033 To Fill or Not to Fill
  8. 【DM8168学习笔记6】学习思路整理
  9. Result结果类型详解
  10. sort方法