城市平乱

时间限制: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
来源
《世界大学生程序设计竞赛高级教程·第一冊》改编
上传者

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 城市平乱 (最短路径)的更多相关文章

  1. 南洋理工 OJ 115 城市平乱 dijstra算法

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

  2. nyoj 115 城市平乱

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

  3. NYOJ 115 城市平乱 (最短路)

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

  4. nyoj 115 城市平乱 dijkstra最短路

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=115 dijkstra算法. #include "stdio.h" ...

  5. 城市平乱(Bellman)

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

  6. Nyoj 城市平乱(图论)

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

  7. 城市平乱 ---- Dijkstra

    题解 : 以暴乱城市 为 源点 向所有点做最短路径 , 然后检查每个不对到暴乱城市的 最短距离 #include<stdio.h> #include<string.h> #in ...

  8. nyoj 115------城市平乱( dijkstra // bellman )

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

  9. nyoj 115-城市平乱 (BFS)

    115-城市平乱 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:8 难度:4 题目描述: 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维 ...

随机推荐

  1. Linux内核OOM机制的理解【转】

    本文转载自:http://blog.csdn.net/zhoutimo/article/details/52024487 What(什么是OOM): Linux下面有个特性叫OOM killer(Ou ...

  2. linux下udev简介【转】

    本文转载自:http://blog.csdn.net/skyflying2012/article/details/9364555 一.关于Udev u即user space,dev是device,通过 ...

  3. MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间

    转自:https://blog.csdn.net/haleyliu123/article/details/70927668/ MySQL查询系统时间 第一种方法:select current_date ...

  4. js设计模式-享元模式

    享元模式实际上是一种优化模式,目的在于提高系统的性能和代码的效率. 使用享元模式的条件:最重要的条件是网页中必须使用了大量资源密集型对象,如果只会用到了少许这类对象,那么这种优化并不划算.第二个条件是 ...

  5. TYVJ 1427 线段树的基本操作

    题意: 单点修改,区间最值 思路: 线段树 原题请戳这里 //By SiriusRen #include <cstdio> #include <cstring> #includ ...

  6. 利用@factory和@dataProvider实现参数化

    利用构造函数将要用的的参数初始化,非常有利于简化脚本.它将外部的数据赋给本地的变量,可以使得初始化后的参数被其他方法使用.直接上代码: private String url;    private S ...

  7. Linux运维最佳实践之网站调优

    高性能静态网站: 1.静态页面中针对图片进行浏览器(客户端)缓存,如公共JavaScript(jQuery,jQuery-1.12.1.min.js)进行缓存 2.对网站输入内容压缩(gzip) 3. ...

  8. 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)

    背景 最近互联网上出现一个热词就是“freestyle”,源于一个比拼rap的综艺节目.在节目中需要大量考验选手的freestyle能力,freestyle指的是rapper即兴的根据一段主题讲一串r ...

  9. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  10. css3 flex 详解,可以实现div内容水平垂直居中

    先说一下flex一系列属性: 一.flex-direction: (元素排列方向) ※ flex-direction:row (横向从左到右排列==左对齐) ※ flex-direction:row- ...