PTA L2-001 紧急救援 (带权最短路)
<题目链接>
题目大意:
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。
输入格式:
输入第一行给出4个正整数N、M、S、D,其中N(2)是城市的个数,顺便假设城市的编号为0~(N-1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。
第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。
输出格式:
第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。
解题分析:
由于本题在保证路径最短的情况下,还要使路径上的点权和最大,所以我们在最短路的松弛过程中,优先松弛路径,如果最短路径相同,再考虑挑选点券和最大的路,并且,最短路的条数也能够在Dijkstra松弛的过程中维护。
#include <bits/stdc++.h>
using namespace std; const int N = ;
const int INF = 0x3f3f3f3f;
#define pb push_back
int n,m,st,ed;
struct Edge{ int to,val; };
vector<Edge>G[N];
int path[N],vis[N],num[N]; struct Node{
int loc,dist,mxval,cnt;
Node(int _loc=,int _dist=,int _mxval=,int _cnt=):loc(_loc),dist(_dist),mxval(_mxval),cnt(_cnt){}
bool operator < (const Node &tmp)const{
return dist>tmp.dist;
}
}node[N]; void Dij(){
memset(path,-,sizeof(path));
for(int i=;i<n;i++){
vis[i]=,node[i]=Node(i,INF,,);
}
priority_queue<Node>q;
node[st]=Node(st,,num[st],);
q.push(node[st]);
while(!q.empty()){
int u=q.top().loc;q.pop();
if(vis[u])continue;
vis[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i].to,cost=G[u][i].val;
if(node[v].dist>node[u].dist+cost){
node[v].dist=node[u].dist+cost;
path[v]=u; //记录上一个点
node[v].cnt=node[u].cnt; //更新这个点的最短路条数
node[v].mxval=node[u].mxval+num[v]; //记录以这个点为终点的最短路的点权和
q.push(node[v]);
}else if(node[v].dist==node[u].dist+cost){
node[v].cnt+=node[u].cnt; //因为有多条最短路径,所以这里将之前的最短路径条数加起来
if(node[v].mxval<node[u].mxval+num[v]){ //更新最短路径上的点权最小值
node[v].mxval=node[u].mxval+num[v];
path[v]=u;
}
}
}
}
} void Print(int u){ //递归打印路径
if(u==st){
printf("%d",st);return;
}
Print(path[u]);
printf(" %d",u);
} int main(){
scanf("%d%d%d%d",&n,&m,&st,&ed);
for(int i=;i<n;i++)scanf("%d",&num[i]);
for(int i=;i<m;i++){
int u,v,w;scanf("%d%d%d",&u,&v,&w);
G[u].pb(Edge{v,w});
G[v].pb(Edge{u,w});
}
Dij();
printf("%d %d\n",node[ed].cnt,node[ed].mxval);
Print(ed);puts("");
return ;
}
PTA L2-001 紧急救援 (带权最短路)的更多相关文章
- 51nod1459 带权最短路
1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分 ...
- 51nod1459(带权值的dijkstra)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...
- hdu5045:带权二分图匹配
题目大意 : n个人 做m道题,其中 每连续的n道必须由不同的人做 已知第i人做出第j题的概率为pij,求最大期望 思路:考虑每连续的n道题 都要n个人来做,显然想到了带权的二分图匹配 然后就是套模板 ...
- BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多少权值, ...
- Codeforces.739E.Gosha is hunting(DP 带权二分)
题目链接 \(Description\) 有\(n\)只精灵,两种精灵球(高级和低级),每种球能捕捉到第\(i\)只精灵的概率已知.求用\(A\)个低级球和\(B\)个高级球能捕捉到精灵数的最大期望. ...
- BZOJ_4609_[Wf2016]Branch Assignment_决策单调性+带权二分
BZOJ_4609_[Wf2016]Branch Assignment_决策单调性+带权二分 Description 要完成一个由s个子项目组成的项目,给b(b>=s)个部门分配,从而把b个部门 ...
- Hdu 2047 Zjnu Stadium(带权并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- POJ 1703 Find them, Catch them(带权并查集)
传送门 Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42463 Accep ...
- Java数据结构——带权图
带权图的最小生成树--Prim算法和Kruskal算法 带权图的最短路径算法--Dijkstra算法 package graph; // path.java // demonstrates short ...
随机推荐
- 【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构
本文从JDK源码包中截取出concurrent包的所有类,对该包整体结构进行一个概述. 在JDK1.5之前,Java中要进行并发编程时,通常需要由程序员独立完成代码实现.当然也有一些开源的框架提供了这 ...
- DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现
前言 这一章我们主要学习由6个纹理所构成的立方体映射,以及用它来实现一个静态天空盒. 但是在此之前先要消除两个误区: 认为这一章的天空盒就是简单的在一个超大立方体的六个面内部贴上天空盒纹理: 认为天空 ...
- Form -- 文件上传
当我们选中文件,点击上传时即可. 而此按钮一般是一张图片覆盖了一个input标签而以.基于这个原理我们可以定制自己喜欢的样式 <div style="text-align: cente ...
- CSS难点 为什么height设置100%会失效,分栏目等高布局(高度自适用布局)的实现方案
前言 相信在平时写CSS的时候大家都或多或少遇见过设置了height为百分比的时候发现不起作用.今天我们就来一探究竟 原因:父元素未设置具体高度,子元素设置height:100%是无效的. 现象以及方 ...
- pymysql的使用及sql注入
pymysql简介 pymysql是python操纵mysql的一个模块,本质上是一个socket客户端 pymysql使用 准备数据 #创建数据库db2,如果已存在,请忽略 CREATE DATAB ...
- 微信获取企业token流程
1.获取服务商Accesstoken(每10分钟企业微信会推送一次,两个小时后过期) 2.根据suitid.accesstoken.第三方企业corpid.第三方企业permanentcode,得到第 ...
- MySQL关于日志配置安全整改及处理方法
[环境介绍] 系统环境:Linux + mysql 5.7.18 + 主从复制架构 [背景描述] 需求:MySQL数据库都有每年的集团安全整改,常常要求弱口令扫描,基线扫描,漏洞扫描等等.对于MySQ ...
- [再寄小读者之数学篇](2014-09-22 distributions and square integrable functions)
Suppose that $f\in L^2$, $g\in \scrD'$, if $$\bex f=g,\mbox{ in }\scrD', \eex$$ then $f=g\in L^2$. I ...
- java8 按条件过滤集合
//黄色部分为过滤条件list.stream().filter(user-> user.getId() > 5 && "1组".equals(user. ...
- ue4 材质表达式分类
绿色节点 颜色 Color Desaturation 数学 Math GO 字体 Font FontSample,FontSampleParameter 实用程序 Utility 常用: Desatu ...