城市平乱

时间限制: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. tiny4412开机动画、开机界面的定制 【原创】

    关键词:Android  linux 开机logo 开机动画  平台信息:内核:linux3.0.68 系统:android/android5.1平台:tiny4412 作者:庄泽彬(欢迎转载,请注明 ...

  2. DDos攻击,使用深度学习中 栈式自编码的算法

    转自:http://www.airghc.top/2016/11/10/Dection-DDos/ 最近研究了一篇论文,关于检测DDos攻击,使用了深度学习中 栈式自编码的算法,现在简要介绍一下内容论 ...

  3. jquery事件重复绑定的几种解决方法

    防止事件重复绑定共有4种方法: bind().unbind()方法 live().die()方法 off().on()方法 one()方法 一.bind().unbind()方法 bind();绑定事 ...

  4. strlen和mb_strlen

    在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别.下面通过例子,讲解这两者之间的区别. 先看例子: <?php // ...

  5. HTML5动态时钟

    实现效果 源码可以去github下载 地址:https://github.com/feifeiliu/jsBlock 参考:慕课网动态时钟

  6. 2015 多校赛 第一场 1007 (hdu 5294)

    总算今天静下心来学算法.. Description Innocent Wu follows Dumb Zhang into a ancient tomb. Innocent Wu’s at the e ...

  7. Fail2ban + firewalld 防护doss攻击

    系统环境:centos7.3 用途:利用fail2ban+Firewalld来防CC攻击和SSH爆破 准备工作: 1.检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 ser ...

  8. Hashlib 用户名密码加密 2.0

    #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/7/10 0008 11:44# @Author : Anthony.Waa# @ ...

  9. P1304 哥德巴赫猜想

    题目描述 输入N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想. (N为偶数). 如果一个数,例如10,则输出第一个加数相比其他解法最小的方案.如10=3+7=5+5,则10=5+ ...

  10. 定义maven的项目结构

    创建一个Maven 的父项目 新建一个maven项目,选中create a simple project 填写以下内容: 如下内容: Group Id :edu.zipcloud.cloudstree ...