邮递员送信

题目描述

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

输入格式

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

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

输出格式

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

样例 #1

样例输入 #1

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

样例输出 #1

83
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define de(x) cout<<x<<" ";
#define sf(x) scanf("%d",&x);
#define Pu puts("");
const int N=1e3+10,M=1e5+10;
int n,m;
int hed[N<<1],nxt[M<<1],var[M<<1],tot,u[M<<1];
int d[N<<1];//dijkstra算法
//但是我原本做的是最小生成树算法,等我把最小生成树算法写完再来补题吧
int vis[N<<1];
struct e{int to,u;
};
struct cmp{bool operator()(e a,e b){return a.u>b.u;}
};
priority_queue<e,vector<e>,cmp>q;
void _add(int x,int y,int z){var[++tot]=y;nxt[tot]=hed[x];hed[x]=tot;u[tot]=z;
}
void fun(int x){for(int i=x;i<=x+n-1;i++){d[i]=INT_MAX;}d[x]=0;q.push(e{x,0});int w,t;while(!q.empty()){w=q.top().to;q.pop();if(vis[w]) continue;vis[w]=1;for(int i=hed[w];i;i=nxt[i]){t=var[i];if(d[t]>d[w]+u[i]){d[t]=d[w]+u[i];q.push(e{t,d[t]});//注意:当有更好的路径时,把这两个点放入队列中//没有中间点}}}
}
int main(){cin>>n>>m;int x,y,z;for(int i=1;i<=m;i++){sf(x)sf(y)sf(z)_add(x,y,z);//建立树_add(y+n,x+n,z);//精髓:建立反向边//跑dijkstra即可得到从某点到1的最短距离}fun(1);fun(n+1);ll ans=0;for(int i=2;i<=n;i++){ans+=d[i]+d[i+n];}de(ans)return 0;
}

P1629 邮递员送信-dijkstra+反向建边相关推荐

  1. P1629邮递员送信与P1342请柬与P1821银牛派队研制联合胜利

    P1342 请柬 P1629 邮递员送信 P1821 [USACO07FEB]银牛派对Silver Cow Party 三倍经验 这三道题思想比较像的,只不过第一道的数据大了很多,于是就成蓝题了. 因 ...

  2. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

  3. 洛谷 P1629 - 邮递员送信(往返两遍dijkstra)

    目录 题目描述 C++代码 题目描述 有一个邮递员要送东西,邮局在节点 1 1 1.他总共要送 n − 1 n-1 n−1 样东西,其目的地分别是节点 2 2 2 到节点 n n n.由于这个城市的交 ...

  4. P1629 邮递员送信(最短路)

    题目描述 有一个邮递员要送东西,邮局在节点 1.他总共要送 n-1样东西,其目的地分别是节点 2到节点 n.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m条道路.这个邮递员每次只能带一 ...

  5. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  6. AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)

    题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...

  7. P1629 邮递员送信(正反向建图 or 暴力)

    题目链接 https://www.luogu.com.cn/problem/P1629 思路 和农场派对这题一样,我们需要正反向建图,然后跑迪杰斯特拉然后再分别加上[2,n][2,n][2,n]的di ...

  8. 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)

    题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...

  9. 洛谷P1629 邮递员送信(最短路径)

    题目描述: 有一个邮递员要送东西,邮局在节点 1.他总共要送 n−1 样东西,其目的地分别是节点 2 到节点 n.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m 条道路.这个邮递员每次 ...

最新文章

  1. 【HTTP协议】域名
  2. 机器学习特征工程之连续变量离散化:等宽分箱
  3. 构建dubbo分布式平台-maven构建根项目
  4. BaseAction
  5. Linux之cmake3.6安装
  6. Prim 算法及其高效实现
  7. vb net 模拟 ctrl+c_8款优秀的.NET开发工具,收藏了
  8. facebook, twitter,QQ, google +1, linkedin, disqus,gigya 按钮Network (登录)
  9. mysql db link_oracle11G数据库db_link连接mysql配置(Windows下无需安装Gateway组件)
  10. python数据1-4
  11. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
  12. 【算法图解】 之 [二分查找法] 详解
  13. SURF特征提取(使用matlab自带函数)
  14. vasp计算-INCAR文件
  15. 怎么自己做淘宝优惠券的网站?看完这个你就全懂了
  16. 手机与电脑视频呼java_Android手机播放电脑视频文件-屌丝必备
  17. 可以免费打电话的网站
  18. android 权限开启回调,Android M请求onSurfaceTextureAvailable回调权限不在活动
  19. wchar_t的使用
  20. Docker下搭建XSS挑战之旅靶场

热门文章

  1. 液晶显示器常见故障维修方法
  2. 常用DOS命令(三)--RD命令
  3. r语言数据变量分段_R语言之数据汇总
  4. 盛大文学云中书城zz
  5. java实现-强智教务系统API文档-全部java封装
  6. 学习笔记 | 演化简单的程序用于玩 Atari 游戏
  7. 红孩儿编辑器的模块设计12
  8. java获取date的时分秒_java Date简单的 获得时分秒代码
  9. JAVA对接语音验证码接口API
  10. Android移动开发-Android设备利用光线传感器监测光照强度的实现