P1629 邮递员送信-dijkstra+反向建边
邮递员送信
题目描述
有一个邮递员要送东西,邮局在节点 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+反向建边相关推荐
- P1629邮递员送信与P1342请柬与P1821银牛派队研制联合胜利
P1342 请柬 P1629 邮递员送信 P1821 [USACO07FEB]银牛派对Silver Cow Party 三倍经验 这三道题思想比较像的,只不过第一道的数据大了很多,于是就成蓝题了. 因 ...
- Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))
题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...
- 洛谷 P1629 - 邮递员送信(往返两遍dijkstra)
目录 题目描述 C++代码 题目描述 有一个邮递员要送东西,邮局在节点 1 1 1.他总共要送 n − 1 n-1 n−1 样东西,其目的地分别是节点 2 2 2 到节点 n n n.由于这个城市的交 ...
- P1629 邮递员送信(最短路)
题目描述 有一个邮递员要送东西,邮局在节点 1.他总共要送 n-1样东西,其目的地分别是节点 2到节点 n.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m条道路.这个邮递员每次只能带一 ...
- POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图
题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...
- AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)
题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...
- P1629 邮递员送信(正反向建图 or 暴力)
题目链接 https://www.luogu.com.cn/problem/P1629 思路 和农场派对这题一样,我们需要正反向建图,然后跑迪杰斯特拉然后再分别加上[2,n][2,n][2,n]的di ...
- 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)
题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...
- 洛谷P1629 邮递员送信(最短路径)
题目描述: 有一个邮递员要送东西,邮局在节点 1.他总共要送 n−1 样东西,其目的地分别是节点 2 到节点 n.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m 条道路.这个邮递员每次 ...
最新文章
- 【HTTP协议】域名
- 机器学习特征工程之连续变量离散化:等宽分箱
- 构建dubbo分布式平台-maven构建根项目
- BaseAction
- Linux之cmake3.6安装
- Prim 算法及其高效实现
- vb net 模拟 ctrl+c_8款优秀的.NET开发工具,收藏了
- facebook, twitter,QQ, google +1, linkedin, disqus,gigya 按钮Network (登录)
- mysql db link_oracle11G数据库db_link连接mysql配置(Windows下无需安装Gateway组件)
- python数据1-4
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
- 【算法图解】 之 [二分查找法] 详解
- SURF特征提取(使用matlab自带函数)
- vasp计算-INCAR文件
- 怎么自己做淘宝优惠券的网站?看完这个你就全懂了
- 手机与电脑视频呼java_Android手机播放电脑视频文件-屌丝必备
- 可以免费打电话的网站
- android 权限开启回调,Android M请求onSurfaceTextureAvailable回调权限不在活动
- wchar_t的使用
- Docker下搭建XSS挑战之旅靶场