洛谷---P1629 邮递员送信

题目描述

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

输入格式

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

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

输出格式

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

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int N=1010;
int n,m;
int dis[N*2];
void dij(vector<vector<pii>> &g,int start){
	priority_queue<pii,vector<pii>,greater<pii>> q;
	dis[start]=0;
	q.push({dis[start],start});
	while(!q.empty()){
		int u=q.top().second;
		int d=q.top().first;
		q.pop();
		if(d>dis[u]) continue;
		for(auto & x:g[u]){
			int v=x.first,w=x.second;
			if(dis[u]+w<dis[v]){
				dis[v]=dis[u]+w;
				q.push({dis[v],v});
				//cout<<"??1";
			}
		}
	}
}
int main(){
	cin>>n>>m;
	vector<vector<pii>> gra(2*n+1);
	for(int i=1;i<=m;++i){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		gra[a].push_back({b,c});
		gra[b+n].push_back({a+n,c});
	}
	int ans=0;
	for(int i=1;i<=2*n;++i) dis[i]=INF;
	dij(gra,1);
	for(int i=2;i<=n;++i){
		ans+=dis[i];
		//cout<<dis[i]<<" ";
	} 
	dij(gra,1+n);
	for(int i=n+2;i<=n<<1;++i) ans+=dis[i];
	cout<<ans<<endl;
	return 0;
}
相关推荐
码农编程录1 小时前
【c/c++3】类和对象,vector容器,类继承和多态,systemd,std&boost
c++
martian6651 小时前
支持向量机(SVM)深度解析:从数学根基到工程实践
算法·机器学习·支持向量机
孟大本事要学习2 小时前
算法19天|回溯算法:理论基础、组合、组合总和Ⅲ、电话号码的字母组合
算法
??tobenewyorker2 小时前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
贾全3 小时前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
GIS小天3 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
oioihoii3 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
满分观察网友z3 小时前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_687399843 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
森焱森4 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机