nyist oj 115 城市平乱 (最短路径)
城市平乱
- 描写叙述
-
南将军统领着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
- 来源
- 《世界大学生程序设计竞赛高级教程·第一冊》改编
-
上传者
userid=%E5%BC%A0%E4%BA%91%E8%81%AA" style="text-decoration:none; color:rgb(55,119,188)">张云聪
最短路径入门题,直接用dijkstral水过。最短路径算是图论里面的基础题,最短路径处女题,dijkstral跟prim算法的思想差点儿相同,代码也差点儿相同,能够做以后的模板;这道题还能够用其它方法来做。其它方法的最短路径还没这么看,看了再更新。
以下是代码;和prim算法的代码差点儿相同,都是基于点更新。由点一个一个更新。
map数组储存图。low数组用来储存两点之间的权值。visit标记是否訪问;
#include <iostream>
#include <cstring>
#include <cstdio>
const int Max=0x3f3f3f3f;
const int maxn=1001;
int map[maxn][maxn],low[maxn],visit[maxn],city[101],m;
void dijkstra(int start)//从一个给定的点開始
{
int i,j,min,pos;
memset(visit,0,sizeof(visit));//初始化visit数组
for(i=1;i<=m;i++)
{
low[i]=map[start][i];
}
low[start]=0;//自身的权值为0
visit[start]=1;
for(i=1;i<m;i++)
{
min=Max;
pos=0;
for(j=1;j<=m;j++)
{
if(!visit[j] && min>low[j])//比較最小值,更新min值
{
min=low[j];
pos=j;
}
}
visit[pos]=1;
for(j=1;j<=m;j++)
{
if(low[j]>min+map[pos][j])//更新low数组
low[j]=min+map[pos][j];
}
}
}
int main()
{
int t,n,p,q;
int a,b,time,i;
scanf("%d",&t);
while(t--)
{
memset(map,Max,sizeof(map));
scanf("%d%d%d%d",&n,&m,&p,&q);
for(i=0;i<n;i++)
scanf("%d",&city[i]);
for(i=0;i<p;i++)
{
scanf("%d%d%d",&a,&b,&time);
if(map[a][b]>time)
map[a][b]=map[b][a]=time;
}
int temp=Max;
dijkstra(q);
for(i=0;i<n;i++)//找出路径最短的城市
{
if(temp>low[city[i]])
temp=low[city[i]];
}
printf("%d\n",temp);
}
return 0;
}
nyist oj 115 城市平乱 (最短路径)的更多相关文章
- 南洋理工 OJ 115 城市平乱 dijstra算法
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- nyoj 115 城市平乱
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- NYOJ 115 城市平乱 (最短路)
* 题目链接* 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M. 现在,小工军师告诉南将军,第K号城市发生了暴乱,南 ...
- nyoj 115 城市平乱 dijkstra最短路
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=115 dijkstra算法. #include "stdio.h" ...
- 城市平乱(Bellman)
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- Nyoj 城市平乱(图论)
描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M. 现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都 ...
- 城市平乱 ---- Dijkstra
题解 : 以暴乱城市 为 源点 向所有点做最短路径 , 然后检查每个不对到暴乱城市的 最短距离 #include<stdio.h> #include<string.h> #in ...
- nyoj 115------城市平乱( dijkstra // bellman )
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- nyoj 115-城市平乱 (BFS)
115-城市平乱 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:8 难度:4 题目描述: 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维 ...
随机推荐
- mysql5.7下面windows平台大小写敏感
转自:https://blog.csdn.net/lrl219/article/details/52889582 根据网上的信息在my.ini下面的mysqld的配置下面添加lower_case_ta ...
- VMware 安装LINUX系统(一)
我用的是WORKSTATION 15 PRO https://www.vmware.com/asean/products/workstation-pro/ 1.安装LINUX 打开Vmware,点击创 ...
- python程序中用类变量代替global 定义全局变量
在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题. 比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码 ...
- Python金融量化
Python股票数据分析 最近在学习基于python的股票数据分析,其中主要用到了tushare和seaborn.tushare是一款财经类数据接口包,国内的股票数据还是比较全的 官网地址:http: ...
- NOIP 2013 T2 火柴排队 ---->求逆序对
[NOIP2013T2]火柴排队 背景 noip2013day1 描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各 自 排成一列, 同一列火柴的高度互不相同, ...
- 大数据查询——HBase读写设计与实践--转
背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的不断 ...
- python课程设计笔记(三)turtle绘图库(海龟库)
实例:绘制一条蟒蛇 #turtle:绘图库(海龟库) import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250 ...
- error:informix Unable to load translation shared library 解决方案
错误:设置informix ODBC时“error:informix Unable to load translation shared library ” 原因 INFORMIXDIR环境变量在操作 ...
- Android 从imageview中获得bitmap的方法
第一种: 使用setDrawingCacheEnabled()和getDrawingCache()这两种方法,第一个是为了设置是否开启缓存,第二个就可以直接获得imageview中的缓存,一般来说需要 ...
- 微信小程序开发之animation动画实现
1. 创建动画实例 wx.createAnimation(OBJECT) 创建一个动画实例animation.调用实例的方法来描述动画.最后通过动画实例的export方法导出动画数据传递给组件的ani ...