NYOJ-115 城市平乱
来源:互联网 发布:禁毒网络知识竞赛 编辑:程序博客网 时间:2024/05/17 06:29
城市平乱
时间限制:1000 ms | 内存限制:65535 KB
难度: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
数据保证暴乱的城市是可达的。 - 输出
- 对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
- 样例输入
13 8 9 81 2 31 2 12 3 21 4 22 5 33 6 24 7 15 7 35 8 26 8 2
- 样例输出
4
思路分析:考查单源最短路问题,可以使用Dijkstra或spfa算法。见到别人内存才300+,难道是用邻接表?我习惯于用邻接矩阵。
#include <cstdio>#include <string>#define MAX 1000 + 10#define INF 0x3fffffffusing namespace std;int MGraph[MAX][MAX];int visit[MAX];int dist[MAX];int que[MAX / 10];void initMGraph() { for( int i = 0; i < MAX; i++ ) for( int j = 0; j < MAX; j++ ) MGraph[i][j] = INF;}void Dijkstra( int start, int n ) { dist[start] = 0; for( int i = 0; i < n; i++ ) { int u = -1, MIN = INF; for( int j = 0; j < n; j++ ) { if( !visit[j] && dist[j] < MIN ) { u = j; MIN = dist[j]; } } if( u == -1 ) return; visit[u] = 1; for( int v = 0; v < n; v++ ) { if( !visit[v] && MGraph[u][v] != INF ) { if( dist[v] > dist[u] + MGraph[u][v] ) { dist[v] = dist[u] + MGraph[u][v]; } } } }}int main() { int T; scanf( "%d", &T ); while( T-- ) { initMGraph(); fill( visit, visit + MAX, 0 ); fill( dist, dist + MAX, INF ); fill( que, que + MAX / 10, 0 ); int n, m, p, q; scanf( "%d%d%d%d", &n, &m, &p, &q ); for( int i = 0; i < n; i++ ) { scanf( "%d", &que[i] ); que[i]--; } int a, b, l; for( int i = 0; i < p; i++ ) { scanf( "%d%d%d", &a, &b, &l ); MGraph[a - 1][b - 1] = l; MGraph[b - 1][a - 1] = l; } Dijkstra( q - 1, m ); int Min = INF; for( int i = 0; i < n; i++ ) { if( dist[que[i]] < Min ) { Min = dist[que[i]]; } } printf( "%d\n", Min ); } return 0;}
0 0
- nyoj 115 城市平乱
- nyoj-115-城市平乱
- nyoj 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ-115 城市平乱
- nyoj 115 城市平乱
- NYOJ 115 城市平乱
- nyoj 115 城市平乱
- nyoj 115 城市平乱
- nyoj 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ 115 城市平乱
- NYOJ-115 城市平乱
- NYOJ 115-城市平乱
- nyoj 115城市平乱
- NYOJ 115 城市平乱
- MySQL的存储引擎
- 网页爬虫技术浅析
- Android 随手记:Android开发在一个Activity中关闭另一个Activity
- AndroidManifest之内容相关属性
- 块级元素、内联元素之间的转换,以及高度适应
- NYOJ-115 城市平乱
- 归纳笔记010:UICollectionView
- 提升对linux的认识和理解中
- Redis入门指南
- MVC5怎么设置默认访问页
- 二项队列分析及实现
- 开闭原则OCP
- Messenger源码解析
- [iOS Swift3.0] 定位二维码+绘制定位框+简单使用UIBezierPath和CAShapeLayer