当前位置: 首页 > news >正文

P1629 邮递员送信

题目描述

有一个邮递员要送东西,邮局在节点 1。他总共要送 n−1 样东西,其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m 条道路。这个邮递员每次只能带一样东西,并且运送每件物品过后必须返回邮局。求送完这 n−1 样东西并且最终回到邮局最少需要的时间。

输入格式

第一行包括两个整数,n 和 m,表示城市的节点数量和道路数量。

第二行到第 (m+1) 行,每行三个整数,u,v,w 表示从 u 到 v 有一条通过时间为 w 的道路。

输出格式

输出仅一行,包含一个整数,为最少需要的时间。

输入输出样例

输入
5 10
2 3 5
1 5 5
3 5 6
1 2 8
1 3 8
5 3 4
4 1 8
4 5 3
3 5 6
5 4 2
输出
83

这一看就是用单源最短路径求解答案,首先去第2到n个节点就不用说了,就是1到每个点的最短路径,这个在单元最短路里面讲过,接着就要看走回来这个问题

走回来怎么弄,以2到n每个点为根据点求出最短路径?这样肯定不行,TLE等着你

那怎么弄,其实仔细想一想,就不难想到,我们可以把有向图反过来存,还是以1为基础求单元最短路,dis里面存的就是2到n距离1的最短路了

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+5;
int n,m;
struct node{int to,dis;friend bool operator <(node a,node b){return a.dis>b.dis;}
};
vector<node> a[N];
vector<node> b[N];
int dis[N];
int dis2[N];
int vis[N];
int vis2[N];
int s;
priority_queue<node>q1;
priority_queue<node>q2;
void dij_start(){for(int i=1;i<=n;i++)dis[i]=INT_MAX;dis[s]=0;q1.push(node{s,0});while(!q1.empty()){node t=q1.top();q1.pop();int x=t.to;if(vis[x]==1)continue;vis[x]=1;for(int i=0;i<a[x].size();i++){int y=a[x][i].to;int z=a[x][i].dis;dis[y]=min(dis[y],dis[x]+z);if(vis[y]==0)q1.push(node{y,dis[y]});}}
}
void dij_over(){for(int i=1;i<=n;i++)dis2[i]=INT_MAX;dis2[s]=0;q2.push(node{s,0});while(!q2.empty()){node t=q2.top();q2.pop();int x=t.to;if(vis2[x]==1)continue;vis2[x]=1;for(int i=0;i<b[x].size();i++){int y=b[x][i].to;int z=b[x][i].dis;dis2[y]=min(dis2[y],dis2[x]+z);if(vis2[y]==0)q2.push(node{y,dis2[y]});}}
}
signed main(){scanf("%lld%lld",&n,&m);int u,v,w;for(int i=1;i<=m;i++){scanf("%lld%lld%lld",&u,&v,&w);a[u].push_back(node{v,w});b[v].push_back(node{u,w});}s=1;dij_start();dij_over();int sum=0;for(int i=2;i<=n;i++)sum+=dis[i]+dis2[i];printf("%lld",sum);
}

相关文章:

  • 蓝桥杯 本质上升序列
  • 2024批量下载微博内容点赞转发评论数等数据,词云分析微博数据
  • 【动手学深度学习-pytorch】9.2长短期记忆网络(LSTM)
  • K8S的mountPath和subPath
  • LeetCode 206.反转链表
  • 如何在智能交通系统中使用物联网技术提高道路安全和效率
  • 怎么让ChatGPT批量写作原创文章
  • Springboot+MybatisPlus+EasyExcel实现文件导入数据
  • Mysql中的那些锁
  • 【跟着CHATGPT学习硬件外设 | 04】ADC
  • SVG XML 格式定义图形入门介绍
  • 【AI模型-机器学习工具部署】远程服务器配置Jupyter notebook或jupyter lab服务
  • kubernetes-k9s一个基于Linux 终端的集群管理工具
  • 微信小程序布局中的单位及使用
  • EXCEL 通过FILES函数获取指定路径中的所有文件名
  • [Vue CLI 3] 配置解析之 css.extract
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Golang-长连接-状态推送
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript设计模式系列一:工厂模式
  • Java应用性能调优
  • springMvc学习笔记(2)
  • tensorflow学习笔记3——MNIST应用篇
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 工程优化暨babel升级小记
  • 前端面试之CSS3新特性
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何选择开源的机器学习框架?
  • 移动端解决方案学习记录
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​configparser --- 配置文件解析器​
  • ​力扣解法汇总946-验证栈序列
  • # 计算机视觉入门
  • #pragma multi_compile #pragma shader_feature
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (70min)字节暑假实习二面(已挂)
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三)c52学习之旅-点亮LED灯
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)详解PHP处理密码的几种方式
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET文档生成工具ADB使用图文教程
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [1525]字符统计2 (哈希)SDUT
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [CCIE历程]CCIE # 20604
  • [dfs] 图案计数
  • [Django开源学习 1]django-vue-admin
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [hdu 3652] B-number