博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ115 市叛乱 【SPFA】
阅读量:5992 次
发布时间:2019-06-20

本文共 2163 字,大约阅读时间需要 7 分钟。

城市平乱

时间限制:
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
数据保证暴乱的城市是可达的。

输出
对于每组測试数据。输出第一支部队到达叛乱城市时的时间。每组输出占一行
例子输入
13 8 9 81 2 31 2 12 3 21 4 22 5 33 6 24 7 15 7 35 8 26 8 2
例子输出
4
来源
上传者

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

#include 
#include
#include
#define maxn 1010#define maxm 200010#define inf 0x3f3f3f3fint 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
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;}

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

你可能感兴趣的文章
关于Linux路由表的route命令(转)
查看>>
Codeforces Round #395 (Div. 2) - A
查看>>
网络基础相关知识内容
查看>>
Django使用MySQL笔记
查看>>
C++和C#实现剪切板数据交互
查看>>
Kafka深入理解-2:Kafka的Log存储解析
查看>>
python中split()进行多分割
查看>>
linux 压缩 解压zip 命令
查看>>
《汇编语言》实验五课程
查看>>
linux下防火墙iptables原理及使用
查看>>
springmvc简述
查看>>
DataTable 排序
查看>>
64.JPA命名策略【从零开始学Spring Boot】
查看>>
C++容器(三):pair类型
查看>>
eclipse下的spring环境配置
查看>>
微软Hololens设备 浅分析
查看>>
我读了这七本书,写了这篇关于如何高效阅读的文章(转)
查看>>
mysql 语句碎片
查看>>
读后感10~12
查看>>
Logback Pattern 日志格式配置
查看>>