城市平乱
来源:互联网 发布:张爱玲老公 知乎 编辑:程序博客网 时间:2024/04/30 14:44
算法:图论(最短路)
描述
南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。
他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。
现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱。
现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。
注意,两个城市之间可能不只一条路。
输入
第一行输入一个整数T,表示测试数据的组数。(T<20)
每组测试数据的第一行是四个整数N,M,P,Q(1<=N<=100,N<=M<=1000,M-1<=P<=100000)其中N表示部队数,M表示城市数,P表示城市之间的路的条数,Q表示发生暴乱的城市编号。
随后的一行是N个整数,表示部队所在城市的编号。
再之后的P行,每行有三个正整数,a,b,t(1<=a,b<=M,1<=t<=100),表示a,b之间的路如果行军需要用时为t
数据保证暴乱的城市是可达的。
输出
对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
样例输入
1
3 8 9 8
1 2 3
1 2 1
2 3 2
1 4 2
2 5 3
3 6 2
4 7 1
5 7 3
5 8 2
6 8 2
样例输出
4
代码:
#include <iostream> #include <cstring> #include <iomanip> #include <algorithm> #include <cstring> #define inf 1000000000 using namespace std; int a[1005][1005]; int dis[1005]; int bo[1005]; int map[1005]; int main() { int n,m,i,j,k,p,q,P,Q,t; int T; cin>>T; while(T--) { cin>>n>>m>>P>>Q; memset(map,0,sizeof(map)); for(i=0;i<n;i++) { cin>>k; map[k]=1; } for(i=1;i<=m;i++) { for(j=1;j<=m;j++) a[i][j]=inf; } while(P--) { cin>>p>>q>>t; if(a[p][q]>t) a[p][q]=a[q][p]=t; } for(i=1;i<=m;i++) dis[i]=a[Q][i]; dis[Q]=0; int Max; memset(bo,0,sizeof(bo)); bo[Q]=1; for(i=1;i<m;i++) { Max=inf;k=1; for(j=1;j<=m;j++) { if(!bo[j]&&dis[j]<Max) { k=j;Max=dis[j]; } } bo[k]=1; for(j=1;j<=m;j++) { if(!bo[j]&&dis[j]>dis[k]+a[k][j]) dis[j]=dis[k]+a[k][j]; } }int Min=inf; for(i=1;i<=m;i++) if(map[i]&&dis[i]<Min) Min=dis[i]; cout<<Min<<endl; } return 0; }
0 0
- 城市平乱
- 城市平乱
- 城市平乱
- 城市平乱
- 城市平乱
- 城市平乱
- 城市平乱
- 城市平乱
- nyoj 115 城市平乱
- NYOJ115 城市平乱
- Dijkstra--城市平乱
- nyoj-115-城市平乱
- nyoj 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ115 城市平乱 【SPFA】
- NYOj115-城市平乱-Dijkstra-
- NYOJ-115 城市平乱
- 【UVa】441 - Lotto
- Jil,高效的json序列化和反序列化库
- 树莓派+Nginx+MySQL打造个人气象站
- Linux 内核源代码情景分析 chap 1 预备知识
- 机器学习基础(二十一)—— 分类与回归、生成模型与判别模型
- 城市平乱
- java反射获取字段以及获取字段值和设置字段值
- JAVA运行时问题诊断-工具应用篇
- java获取获得Timestamp类型的当前系统时间
- 【Android基础】Activity启动模式以及Intent Flags 与 栈 的全面解析
- Easy Femininity. Sophisticated Silk Brand "GLOIRE"
- 实现类似新浪微博@人功能
- web UI技术方案备忘
- oracle 空字符'' 和Null