城市平乱

时间限制: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

数据保证暴乱的城市是可达的。

输出
对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
样例输入
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

分析:由于最终每个城市的军队都要到达暴乱城市,所以我们可以选择暴乱城市作为Dijkstra算法的源点,即求暴乱城市到各个城市的最短路

#include<string.h>
#include<stdio.h>
#define INF 9999999
using namespace std;
///迪杰斯特拉最短路
int Map[1005][1005];///存储地图数据
int dis[1005];///存储距离
int vis[1005];///已走过的点标记为1,初始化为0void Dijsktra(int s, int N) ///从原点s到其他N-1个点的距离
{for(int i=1; i<=N; i++) ///初始化距离数组dis[i]=Map[s][i];vis[s]=1;///s到各点距离,所以s已经被访问int minn,u;///辅助变量for(int i=1; i<=N-1; i++) ///迪杰斯特拉核心语句{minn=INF;for(int j=1; j<=N; j++){if(vis[j]==0&&dis[j]<minn){minn=dis[j];u=j;}}vis[u]=1;///标记为已访问for(int v=1; v<=N; v++){if(Map[u][v]<INF){if(dis[v]>dis[u]+Map[u][v])dis[v]=dis[u]+Map[u][v];///松弛完成}}}
}int main()
{int K;scanf("%d",&K);while(K--){int n, m, p, q;int army[105];scanf("%d%d%d%d", &n, &m, &p, &q);for(int i=0; i<n; i++)scanf("%d", &army[i]);for(int i=0; i<1005; i++) ///初始化{for(int j=0; j<1005; j++){if(i==j) Map[i][j] = 0;else Map[i][j] = INF;}}for(int i=0; i<p; i++){int a, b, t;scanf("%d%d%d", &a, &b, &t);if(t<Map[a][b]) {Map[a][b] = t;Map[b][a] = t;}}memset(vis,0,sizeof(vis));///已访问的标记为1Dijsktra(q, m);int minx = INF;for(int i=0; i<n; i++){if(dis[army[i]]<minx) minx = dis[army[i]];}printf("%d\n", minx);}return 0;
}

NYOJ 115 城市平乱(图论Dijkstra)相关推荐

  1. NYOJ 115 城市平乱

    城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别 ...

  2. NYOJ 115 城市平乱

    描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M. 现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都 ...

  3. 图论南阳155题 城市平乱

    思路:刚开始用了佛洛伊德算法,没想到超时了.后来改用多次迪杰斯特算法就过了. 迪杰斯特算法是求出源点到其余点的最短距离 这里是求出队伍到危险去的距离然后找出最小的那个然后输出就ok了,注意他说两个城市 ...

  4. 城市平乱 (dijkstra模板题)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=115 本题求单源最短路,这里有个技巧,因为源点不一,这时我们可以设置一个"超级源 ...

  5. 前端剑法第五式————平乱

    清溪牧者宿云田,忽梦村林鸡鸣起, 佳影轩窗,心思潸然起 马嘶人吼惊怒起,何人? 一剑平乱四下寂 纵马疾行,少年意气志天涯 今日学习内容 目录 文档流(normal flow) 盒子模型 1:内容区(c ...

  6. 图论--Dijkstra算法总结

    Key word: ①BFS转换Dijkstra ②其他关系转化为最短路 ③反向建边及反向Dijkstra ④稠密图.稀疏图 ⑤链式前向星 ⑥Vector建图 ⑦超级源点&汇点 详解: 1.B ...

  7. 图论 ---- dijkstra变种dp Codeforces Div2 703 E. Paired Payment

    题目链接 题目大意: 无向图,但是一次一定要走两步,权值为两个边边权和的平方.求1到其他每个点的最短距离. n∈[1,1e5],m∈[1,min(2e5,n(n−1)2)],wi∈[1,50]n\in ...

  8. 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)

    [0]README 0.1)为什么有这篇文章?因为 Dijkstra算法的优先队列实现 涉及到了一种新的数据结构,即优先队列(二叉堆)的操作需要更改以适应这种新的数据结构,我们暂且吧它定义为Dista ...

  9. windows中如何将已安装的nodejs高版本降级为低版本

    第一步:先清空本地安装的node.js版本 1.按健win+R弹出窗口,键盘输入cmd,然后敲回车(或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出,输入cmd再点击回车键) 然后进入命令控制行窗 ...

最新文章

  1. Linux中 set、env、declare、export显示shell变量的区别
  2. sleep方法和wait方法的区别
  3. 职场上个人的核心技术_职场上,这3种人表面老实,实际却是个“高手”,要远离...
  4. VB100十月测试:360可牛凯歌高奏 金山失利瑞星缺席
  5. 超慢速移动动画使用CSS3实现流畅效果
  6. iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转
  7. 7-2 通讯录的录入与显示 (10 分)
  8. 苹果照片库的照片,直接拖到桌面上
  9. java 判断session失效_session过期时间设置和判断session是否过期
  10. 配置文件填写内网地址和127.0.0.1的区别
  11. 步进电机、伺服电机、舵机的理解
  12. 程序员,你何时离开北京
  13. 使用rails Devise
  14. 107 THREE.JS 使用StereoEffect实现模拟VR双屏
  15. 如何删除PDF文件中其中一页?
  16. 7种常见分布的数学期望及其证明
  17. android 5.0 刷机教程,一加手机怎么升级安卓5.0系统?一加手机刷Android 5.0教程
  18. Anaconda中的spyder安装Terminal插件
  19. 中国平行进口汽车行业发展方向及未来发展趋势展望报告2022-2028年
  20. 两年经验的阿里、头条面经(已拿offer),大厂面试套路屡试不爽

热门文章

  1. WinRAR从入门到高级的操作技巧集合
  2. 【分布式】Zookeeper请求处理
  3. Codeforces Beta Round #11 A. Increasing Sequence 贪心
  4. 疯狂ios讲义疯狂连载之日期选择器(UIDatePicker)
  5. STC12C5A60S2笔记8(串口)
  6. Android 基础教程之-------Android ProgressBar的使用!
  7. 微软社区精英计划 - 你会如何回答【6月26日】北京.Net学习活动QA时提出的问题...
  8. do not lie on the bed to watch pc or phones
  9. feedback from waic
  10. everytime you feel nervous