城市平乱
2016-03-25 17:25
218 查看
算法:图论(最短路)
描述
南将军统领着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
代码:
描述
南将军统领着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; }
相关文章推荐
- 构建高并发高可用的电商平台架构实践
- oracle 空字符'' 和Null
- 继承关系存储树状结构数据--查询优化
- 实现类似新浪微博@人功能
- web UI技术方案备忘
- HDU 3697 Selecting courses(贪心)
- think in java学习笔记
- solr多条件查询(二)
- [Powershell] 检查IIS设置
- 括号匹配,用栈处理
- Jil,高效的json序列化和反序列化库
- Yii2 mongodb 扩展的where的条件加入大于 小于号
- 机器学习基础(二十一)—— 分类与回归、生成模型与判别模型
- 二维树状数组
- Linux 内核源代码情景分析 chap 1 预备知识
- JAVA运行时问题诊断-工具应用篇
- lightoj 1064 - Throwing Dice 简单DP
- java获取获得Timestamp类型的当前系统时间
- 转场动画再次学习
- Android开机自启动程序