不要为难我们了(最短路,djs)

news/2025/3/22 12:30:54/文章来源:https://www.cnblogs.com/bakul/p/18786404

L2-2 不要***难我们了

分数 25

作者 rea_lity

单位 成都信息工程大学

题目描述:

ShallowMapleYFffffff 发现今年的算法题目过于的 ***难 我们的算法选手,于是他们两个想打电话来通知 rea_lity 修改题目的难度。要对我们的 蒜金(算法竞赛) 选手更加的友好。众所周知,电话信号要被传输到由基站建成的网络,而网络的传输需要一定的时间。当然,基站内部处理数据也需要一定的时间。

rea_lity 接到这个消息的时候,思考到一个问题:

  • 每一个基站都有一个独有的ID(1∼n)。
  • rea_lity 现在知道基站 a 和基站 b 之间传输信息需要时间 t ,并且信息可以双向传输(即,a 可以向 b 发送信息,b 也可以向 a 发送信息)。
  • rea_lity 也知道 ID 为 i 的基站内部处理数据所需要的时间为 Ti​,并且只有接收端基站才会消耗时间。
  • ShallowMapleYFffffff 所处于的基站的 ID 为 start ,rea_lity 所处的基站的 ID 为 end 。
  • 一个基站不会向自己传输信息,两个基站之间可能会有多条传输路径。

问题为,ShallowMapleYFffffff 打电话过来所消耗的时间 最短 是多少,又有多少种不同的 最短 时间路径呢?

输入描述:

  • 第一行有两个数字 n ,m(1⩽n⩽2×105,1⩽m⩽2×105) ,在这个网络中有 n 个基站,和 m 条传输线路。
  • 第二行有两个数字 start,end ,表示开始和结束位置的基站 ID(1⩽ID⩽n)。
  • 第三行有 n 个数,Ti​(1⩽i⩽n,0<Ti​⩽105) 表示第 i 个基站内部处理数据的时间。
  • 接下来的 m 行,每一行有三个数字 a,b,t,表示 a 和 b 之间传输信息需要时间 t(0<t⩽105) 。

输出描述:

  • 第一行输出一个数字,表示 start 到 end 所需最短时间。
  • 第二行输出一个数字,表示最短时间的路径有多少条。

输入样例:

4 51 41 2 3 11 2 10001 2 12 3 13 4 11 4 8

输出样例:

92

样例解释:

  • 有两种路线花费的时间最短为 9 ,第一条为 (1→2→3→4),第二条为 (1→4)

分析

明显最短路问题,使用链式前向星存边,再用Dijkstra算法求最短路,用队列优先优化时间为\((mlogm)\)

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 4e5+5;  //注意双向边!!!!!!!!!!!!!!!!所以应该有4e5
int head[N],idx;      
struct edge{          //边int to, w, nxt;edge(){}edge(int to, int w, int nxt):to(to), w(w), nxt(nxt){}
};bool vis[N];        //标记
int dis[N];        //距离数组struct Node            //节点
{int pos, dis;Node(){}Node(int pos, int dis):pos(pos), dis(dis){}bool operator < (const Node& a) const{return dis > a.dis;}/* data */
};priority_queue<Node> q;    //队里优先
int n, m , sta, ed;edge e[N];                                inline void add(int u, int to, int w){   e[++idx] = {to, w, head[u]};head[u] = idx;
}int ways[N], wig[N];         void djs(){               //dijsktramemset(dis, 0x3f, sizeof(dis));  //距离初始化大dis[sta] = 0;ways[sta] = 1;q.push({sta, 0});while(!q.empty()){Node t = q.top();q.pop();int pos = t.pos;if(vis[pos]) continue;     //如果已经进出过队了,就不会再成为最短节点vis[pos] = true;           //标记已经成为了最短的节点for(int i = head[pos];i ; i = e[i].nxt){  //遍历int to = e[i].to;                               if(!vis[to] && dis[pos]+e[i].w < dis[to]){  //没有成为过最短节点,进行松弛操作dis[to] = dis[pos] + e[i].w;       ways[to] = ways[pos];q.push({to, dis[to]});                  //最短节点候选}else if (dis[to] == dis[pos]+e[i].w){       //距离相等,路径数相加ways[to] += ways[pos];}}}}int main(){cin >> n >> m >> sta >> ed;for(int i = 1;i <= n; ++i) cin >> wig[i];for(int i = 1;i <= m; ++i){int a, b, t;cin >> a >> b >> t;add(a, b, t+wig[b]);add(b, a, t+wig[a]);      //双向边}djs();cout << dis[ed] << '\n' << ways[ed];}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20244224 实验一《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名: 旦曾央京 学号:20244224 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等; 4.编…

【智慧构造题】CF1427E Xum

我们发现这个原数为奇数的条件比较神秘,于是我们考虑每次把这个数字第一位 \(1\) 给干了。 考虑怎么构造。 令 $d=\lfloor \log_2 x \rfloor $ 令 \(x=1abc1\) \(x1=1abc10000\) \(x2=1abc0abc1\) \(x3=x2+x1=1abc01abc1\) \(x4=x ⊕ x3=1abc000000\) \(x5=x1+x1=1abc100000…

DataGrip结果运行在代码区域

DataGrip运行过后发现运行的结果在代码区域解决方式进入设置界面 点击左上角File(文件)->settings(设置) 搜索栏输入results或output and results 找到下面的设置界面 找到Results下的 Show results in editor ,取消勾选

我们接着创建项目中的app

在pycharm中运行以下代码python manage.py startapp teslaapp运行后呢会在目录中在创建一个名字叫teslaapp的包接着我们还需要在项目Tesla包中的setting文件中 添加我们刚创建的app名称

CMU_15445_Project4_BonusTask_Serializable_Verification

Serializable Verification 我们知道 MVCC 并不能解决幻读以及写偏差的问题, 仅通过 MVCC 的事务调度是无法保证数据库引擎的 ACID 原则的, 那么为了保证数据库的 ACID 原则, 即使在调度的过程中无法保证, 可以通过在 Commit 的时候, 通过验证, Abort 可能造成写偏差于幻读的事…

使用低代码平台设计UI

由于自己不是专业的设计师,就自己简单画个UI界面,那么就可以用到下面的低代码平台 http://120.92.142.115:81/vform3/ 里面可以选择体验vue3模板 进入下面图中的设计界面可以自己拖动组件 修改组件展示给用户的标签名称 以及数据传输时发送的字段名称 可以设置是否必填 默认值…

使用 Hosting 构建 WPF 程序 - prism 篇

WPF + .NET Generic Host + Prism + CommunityToolkit.Mvvm在 使用 Hosting 构建 WPF 程序 - Stylet 篇 中,使用 Hosting + Stylet 的方式,构建了一个 WPF 框架, 本文用于记录使用 .NET Generic Host + Prism 构建 WPF 所需的修改,仅供参考。 示例代码:Jasongrass/Demo.Ap…

如何构建一个用于3D扫描的电动转台

在这个项目中,我将向您展示如何构建一个用于3D扫描的电动转台。这个DIY项目由三个主要部分组成:顶板、中央齿轮驱动板和底座。顶板保持静止,作为放置待扫描物体的平台。在设计的核心,中间板的特点是一个内部齿轮机构,隐藏在视线之外,这是由一个步进电机驱动。这个齿轮板旋…

【每日一题】20250322

【每日一题】 1.(18分) \(\hspace{0.7cm}\)I.(5分)根据单摆周期公式 \(\displaystyle T=2\pi\sqrt{\frac{l}{g}}\),可以通过实验测量当地的重力加速度.如图 \(1\) 所示,将细线的上端固定在铁架台上,下端系一小钢球,就做成了单摆.\(\hspace{0.7cm}\)(1)用游标卡尺测…

Git 和 GitHub 笔记

笔记说明 该笔记记录所有我使用 Git 和 GitHub 过程中遇到的、觉得需要记录的事情。复杂的问题按需抽出来单独称为一篇笔记,换成博客链接。 修改远程仓库名字后,本地仓库做什么处理? git remote -v git remote set-url origin https://github.com/用户名/新仓库名.git or gi…

外设驱动库开发笔记55:MAX31865热电阻变送器驱动

外设驱动库开发笔记55:MAX31865热电阻变送器驱动热敏电阻(RTD)作为一种高精度的温度传感器,在工业控制、医疗设备和实验室测量等领域有着广泛的应用。MAX31865是Maxim Integrated推出的一款专为RTD设计的信号调理器,能够简化RTD的温度测量过程。本文将详细介绍如何设计一个…

【20250322】热烈庆祝《青猪》系列第二季定档7月

www七年终于等来了 初中的时候还经常在班上跟同学聊这番好耶!考个好成绩,暑假一边学CSAPP一边看!