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