PTA 紧急救援 /// dijkstra 最短路数 输出路径
题目大意:
给定 n m s t ;表示n个点编号为0~n-1 m条边 起点s终点t
接下来一行给定n个数;表示第i个点的救援队数量
接下来m行给定u v w;表示点u到点v有一条长度为w的边
求从s到t的最短路有几条
一条路上可以集合的救援队最多有多少
输出路径
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define dec(i,j,k) for(int i=j;i>=k;i--)
#define gcd(i,j) __gcd(i,j)
#define mem(i,j) memset(i,j,sizeof(i))
const int N=2e5+;
const int mod=1e9+; int n,m,s,t;
int V[N];
struct NODE{ int to,len; };
vector <NODE> G[N];
int dis[N], num[N];
int sumV[N], pre[N];
bool vis[N]; int main()
{
while(~scanf("%d%d%d%d",&n,&m,&s,&t)) {
inc(i,,n-) scanf("%d",&V[i]);
inc(i,,n-) G[i].clear();
while(m--) {
int u,v,w; scanf("%d%d%d",&u,&v,&w);
G[u].push_back({v,w});
G[v].push_back({u,w});
}
mem(sumV,); sumV[s]=V[s]; // 到i点的最短路可集合sumV[i]救援队
mem(dis,INF); dis[s]=; // 到i点的最短路长度为dis[i]
mem(num,); num[s]=; // 到i点的最短路有num[i]条
mem(pre,-); mem(vis,); // pre记录路径前驱 vis标记走过
while() {
int u, mini=INF;
inc(i,,n-)
if(!vis[i] && dis[i]<mini)
mini=dis[i], u=i;
if(mini==INF) break;
vis[u]=;
int all=G[u].size();
inc(i,,all-) {
NODE v=G[u][i];
if(vis[v.to]) continue;
if(dis[v.to]>dis[u]+v.len) {
sumV[v.to]=sumV[u]+V[v.to];
dis[v.to]=dis[u]+v.len;
num[v.to]=num[u];
pre[v.to]=u;
} else if(dis[v.to]==dis[u]+v.len) {
num[v.to]+=num[u];
if(sumV[v.to]<sumV[u]+V[v.to]) {
sumV[v.to]=sumV[u]+V[v.to],
pre[v.to]=u;
}
}
}
}
printf("%d %d\n",num[t],sumV[t]);
stack <int> s; int c=;
while(t!=-) s.push(t), t=pre[t], c++;
while(!s.empty()) {
printf("%d",s.top()); s.pop();
if(--c==) printf("\n");
else printf(" ");
}
} return ;
}
PTA 紧急救援 /// dijkstra 最短路数 输出路径的更多相关文章
- pta—紧急救援 (dijkstra)
题目连接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题面: 作为一个城市的应急救援队伍 ...
- LA 2957 最大流,最短时间,输出路径
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=1 ...
- PTA 7-33 地下迷宫探索(深搜输出路径)
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径
模板题最短路+输出路径如果最短路不唯一,输出cost最小的 #include <iostream> #include <cstdio> #include <algorit ...
- dijstra+输出路径总结
#include<iostream> #include<math.h> #include<memory.h> using namespace std; #defin ...
- VS 工程的 输出路径和工作路径的区别
输出路径,是vs编译项目生成可执行文件的路径:工作路径是环境变量,比如我们在程序中写相对路径,就是以这个路径为基础的.在默认情况下,输出路径和工作路径都不写的话,默认是程序的bin下面的debug或者 ...
- HD1385Minimum Transport Cost(Floyd + 输出路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- C++builder XE 安装控件 及输出路径
C++builder XE 安装控件 与cb6不一样了,和delphi可以共用一个包. 启动RAD Studio.打开包文件. Project>Options>Delphi Compile ...
- HDU 1385 Minimum Transport Cost (最短路,并输出路径)
题意:给你n个城市,一些城市之间会有一些道路,有边权.并且每个城市都会有一些费用. 然后你一些起点和终点,问你从起点到终点最少需要多少路途. 除了起点和终点,最短路的图中的每个城市的费用都要加上. 思 ...
随机推荐
- pyspider启动错误解决(Python 3.7)
问题一 安装好pyspider之后,在启动的时候,报出上图错误. 原因 async和await从 python3.7 开始已经加入保留关键字中. 参考: What’s New In Python 3. ...
- Git--08 Jenkins
目录 Jenkins 01. 安装准备 02 .安装Jdk和Jenkins 03 .配置Jenkins 04. 插件安装 05. 创建项目 06. Jenkins获取Git源代码 07. 立即构建获取 ...
- Linux双网卡绑定bond详解
参考资料: 1.https://blog.csdn.net/shengerjianku/article/details/79221886
- 【LeetCode】双指针 two_pointers(共47题)
[3]Longest Substring Without Repeating Characters [11]Container With Most Water [15]3Sum (2019年2月26日 ...
- 【LeetCode】分治法 divide and conquer (共17题)
链接:https://leetcode.com/tag/divide-and-conquer/ [4]Median of Two Sorted Arrays [23]Merge k Sorted Li ...
- Sass-数字运算
在 Sass 运算中数字运算是较为常见的,数字运算包括前面介绍的:加法.减法.乘法和除法等运算.而且还可以通过括号来修改他们的运算先后顺序.和我们数学运算是一样的,一起来看个示例. .box { wi ...
- HTML基础 内联样式改进 三毛语录
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 【串线篇】sql映射文件-分布查询(上)association 1-1
1.场景 1把钥匙带1把锁 JavaBean:private Lock lock;//当前钥匙能开哪个锁: 1). interface KeyDao: public Key getKeyByIdSim ...
- $NOIP2018$ 爆踩全场记
NOIP2018 Day-1 路还很长. 这里就是起点. 这是最简单的一步,但这是最关键的一步. 联赛就在眼前了,一切好像都已经准备好了,一切好像又都没准备好. 相信自己吧,\(mona\),这绝对不 ...
- hdu 5810:Balls and Boxes(期望)
题目链接 这题似乎就是纯概率论.. E(V)=D(X_i)=npq (p=1/m,p+q=1) #include<bits/stdc++.h> using namespace std; t ...