城市平乱

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

忘了是无向图,WA了好几次-_-|||

#include <stdio.h>
#include <string.h>
#include <queue> #define maxn 1010
#define maxm 200010
#define inf 0x3f3f3f3f int head[maxn];
struct Node {
int v, dis, next;
} E[maxm];
bool vis[maxn];
int dist[maxn], tar[maxn];
int n, m, p, q, id; void addEdge(int u, int v, int dis) {
E[id].v = v; E[id].dis = dis;
E[id].next = head[u]; head[u] = id++;
} void getMap() {
scanf("%d%d%d%d", &n, &m, &p, &q);
int i, u, v, dis; id = 0;
memset(head, -1, sizeof(int) * (m + 1));
for(i = 0; i < n; ++i)
scanf("%d", &tar[i]);
while(p--) {
scanf("%d%d%d", &u, &v, &dis);
addEdge(u, v, dis);
addEdge(v, u, dis);
}
} void SPFA() {
std::queue<int> Q;
memset(dist, 0x3f, sizeof(int) * (m + 1));
memset(vis, 0, sizeof(bool) * (m + 1));
dist[q] = 0; vis[q] = 1; Q.push(q);
int u, v, i;
while(!Q.empty()) {
u = Q.front(); Q.pop(); vis[u] = 0;
for(i = head[u]; i != -1; i = E[i].next) {
if(dist[v = E[i].v] > dist[u] + E[i].dis) {
dist[v] = dist[u] + E[i].dis;
if(!vis[v]) {
vis[v] = 1; Q.push(v);
}
}
}
}
} void solve() {
SPFA();
int ans = inf;
for(int i = 0; i < n; ++i)
if(ans > dist[tar[i]])
ans = dist[tar[i]];
printf("%d\n", ans);
} int main() {
// freopen("stdin.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--) {
getMap();
solve();
}
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

NYOJ115 市叛乱 【SPFA】的更多相关文章

  1. NOIP2009最优贸易[spfa变形|tarjan 缩点 DP]

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  2. 【NOIP2009 T3】 最佳贸易 (双向SPFA)

    C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道 ...

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

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

  4. 6101 最优贸易 (双向spfa)

    描述C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的 ...

  5. voj 1754 spfa

    最优贸易 最优贸易 描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 ...

  6. 【BZOJ 2007】 2007: [Noi2010]海拔 (平面图转对偶图+spfa)

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2504  Solved: 1195 Description YT市 ...

  7. nyoj-115-城市平乱(dijkstra算法)

     题目链接 /* Name:nyoj-115-城市平乱 Copyright: Author: Date: 2018/4/25 17:28:06 Description: dijkstra模板题 枚举从 ...

  8. Spfa【P1813】拯救小tim_NOI导刊2011提高(02)

    Description 小tim在游乐场,有一天终于逃了出来!但是不小心又被游乐场的工作人员发现了„„所以你的任务是安全地把小tim护送回家.但是,A市复杂的交通状况给你出了一大难题. A市一共有n个 ...

  9. HDU-3499:Flight(SPFA+dp)

    Recently, Shua Shua had a big quarrel with his GF. He is so upset that he decides to take a trip to ...

随机推荐

  1. Qt递归拷贝和删除目录

    最近在翻看项目代码时,看到了这两个函数,想到这个功能十分常用,因此拿出来与大家分享,希望对大家有用.几点说明: 1.记得当初写代码那会,是参考了网上的帖子写的,做了一点小修改.因此代码源于网络. 2. ...

  2. sqlserver05 字符串拆分

    -- 规则:将 gs-abc-aa-aa 拆分为一下字符 -- gs-abc-aa-aa -- gs-abc-aa -- gs-abc -- gs select * from dbo.f_split( ...

  3. accumulate

    accumulate?就是sum up a range of elements.呵呵.这个挺简单的.以下是这个算法的简单介绍: Syntax: #include <numeric>//呵呵 ...

  4. 《Swift编程语言》中文翻译及读书笔记page25

    The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里能够使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swi ...

  5. Entity - 使用EF框架进行增删改查 - 模型先行

    模型先行:先创建数据库实体模型,然后再进行数据库的增删改查. 基本步骤是不变的,可参照 <Entity - 使用EF框架进行增删改查 - 数据库先行> 其中的不同是,在创建数据库实体模型的 ...

  6. js计算日期相差的天数

    在网站开发中,经常会遇到计算日期相差的天数,js 没有提供相应的方法,所以自己写一个,方便将来查看: 代码: function DateDiff(sDate1, sDate2, splitStr) { ...

  7. PHP之操作数据库

    数据库,顾名思义,是一个存放数据的容器.然后在使用过程中对数据库里面的数据增删改查,具体是怎么实现的呢? 这儿不得不提一下一个神奇的东西:SQL语句:结构化查询语言(Structured Query ...

  8. 14.8.2 Verifying File Format Compatibility 校验文件格式兼容性:

    14.8.2 Verifying File Format Compatibility 校验文件格式兼容性: 14.8.2.1 Compatibility Check When InnoDB Is St ...

  9. TCP/IP笔记 二.网络层(1)

    1. IP 1.1 配套协议 IP 是 TCP/IP 体系中两个最主要的协议之一 . 与 IP 协议配套使用的还有四个协议:   (1)ARP (Address Resolution Protocol ...

  10. win32 字体变换与窗口同大同小

    #include <windows.h> #include "res/resource.h" LRESULT CALLBACK WinProc(HWND hwnd, U ...