P1629 邮递员送信
题目描述:
有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间。这个邮递员每次只能带一样东西。求送完这N-1样东西并且最终回到邮局最少需要多少时间。
输入格式:
第一行包括两个整数N和M。
第2到第M+1行,每行三个数字U、V、W,表示从A到B有一条需要W时间的道路。 满足1<=U,V<=N,1<=W<=10000,输入保证任意两点都能互相到达。
输出格式:
输出仅一行,包含一个整数,为最少需要的时间。
数据规模:
对于30%的数据,有1≤N≤200;
对于100%的数据,有1≤N≤1000,1≤M≤100000。
思路 :
这是一道最短路问题,SPFA算法可以很好的解决。但是题目特殊在最后需要的并不是单一两点间的最短路,而是1到2~N每个点来回最短路程的总和,所以需要以1点为起点做一次SPFA,得到1点到每个点的最短路。而后处理每个点到1之间的最短路。可以将边反向,以求得N个点到1的最短距离,首先运用三个数组U,V,W记录输入的参数,在跑完1到每个点的最短路后,清空vis数组和存储路径信息的邻接表,初始化dis数组,(Tips:各位初次写没初始化的萌新,这里的初始化很重要!!),然后对U,V,W进行遍历,本来为U->V边权为W的路径在这里方向进行反向存储了!!现在要存储的应该是V->U边权为W的路径。这样再一次以1为起点进行一次SPFA,便可以的到每个点到1的最短路(Tips:这里相当于将所有路径反向,也就相当于把1作为终点去找每个点为起点时的返程的最短路)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
;
;
int n,m,cnt,ans,hd[N],dis[N],a[M],b[M],c[M];
bool inq[N];
queue<int>q;
struct edge
{
int to,nxt,val;
}v[M];
void addedge(int x,int y,int z)
{
++cnt;
v[cnt].to=y;
v[cnt].nxt=hd[x];
v[cnt].val=z;
hd[x]=cnt;
}
int main()
{
scanf("%d%d",&n,&m);
;i<=m;i++)
{
scanf("%d%d%d",&a[i],&b[i],&c[i]);
addedge(a[i],b[i],c[i]);
}
memset(dis,0x3f,sizeof(dis));
dis[]=;
q.push();
inq[]=;
while(!q.empty())
{
int u=q.front();
q.pop();
inq[u]=;
for(int i=hd[u];i;i=v[i].nxt)
if(dis[v[i].to]>dis[u]+v[i].val)
{
dis[v[i].to]=dis[u]+v[i].val;
if(!inq[v[i].to])
{
inq[v[i].to]=;
q.push(v[i].to);
}
}
}
;i<=n;i++)
ans+=dis[i];
memset(v,,sizeof(v));
memset(hd,,sizeof(hd));
cnt=;
;i<=m;i++)
addedge(b[i],a[i],c[i]);
memset(dis,0x3f,sizeof(dis));
dis[]=;
q.push();
inq[]=;
while(!q.empty())
{
int u=q.front();
q.pop();
inq[u]=;
for(int i=hd[u];i;i=v[i].nxt)
if(dis[v[i].to]>dis[u]+v[i].val)
{
dis[v[i].to]=dis[u]+v[i].val;
if(!inq[v[i].to])
{
inq[v[i].to]=;
q.push(v[i].to);
}
}
}
;i<=n;i++)
ans+=dis[i];
printf("%d\n",ans);
;
}
P1629 邮递员送信的更多相关文章
- 洛谷——P1629 邮递员送信
P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...
- Luogu P1629 邮递员送信
P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...
- 洛谷 P1629 邮递员送信 题解
P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...
- 洛谷 P1629 邮递员送信-反向建边
洛谷 P1629 邮递员送信 题目描述: 有一个邮递员要送东西,邮局在节点 11.他总共要送 n-1n−1 样东西,其目的地分别是节点 22 到节点 nn.由于这个城市的交通比较繁忙,因此所有的道路都 ...
- 洛谷P1629 邮递员送信
题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每 ...
- 洛谷 P1629 邮递员送信
题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每 ...
- P1629 邮递员送信(未完成)
题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每 ...
- 洛谷—— P1629 邮递员送信
https://www.luogu.org/problem/show?pid=1629 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比 ...
- yzoj P1412 & 洛谷P1629 邮递员送信 题解
有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每次只能带一 ...
随机推荐
- require.js实现js模块化编程(二):RequireJS Optimizer
require.js实现js模块化编程(二):RequireJS Optimizer 这一节,我们主要学习一下require.js所提供的一个优化工具r.js的用法. 1.认识RequireJS Op ...
- 主键乱序插入对Innodb性能的影响
主键乱序插入对Innodb性能的影响 在平时的mysql文档学习中我们经常会看到这么一句话: MySQL tries to leave space so that future inserts do ...
- 4天精通arcgis
真是掉进了一个史无前例的坑 --ArcGIS产品线为用户提供一个可伸缩的,全面的GIS平台. 这是百科的介绍,简单来讲,这就是一个地图,可以搞事情. 学的是ArcGIS API for JavaScr ...
- mybatis 分页问题 (个人认为算是个bug)
问题描述:相同的查寻条件, 分页显示的结果和.net版本的分页结果数量一样,排序不一样, 不同的页有相同的数据.比如:第2面和第3页都有同一条相同的数据. 核心代码: //自己实现 int total ...
- Windows环境下Android Studio安装和使用教程
Windows环境下Android Studio安装和使用教程 来源: http://www.cnblogs.com/liuhongfeng/archive/2015/12/30/5084896.ht ...
- 利用VS2008发布一个简单的webservice
一个开发好的webservice,怎样发布出去,供其他电脑访问呢? 本文将介绍如何发布一个简单的webservice,其中的内容都是在网上查看别人文章,自己仿照着做了一遍,因此,难免会发生错误,如果发 ...
- IOS学习——iphone X的适配
说实话,对于一个刚入门iOS两个月的新手而言,在拿到这个任务的时候整个人都是懵逼的,怎么做适配?哪些地方需要适配?该怎么做?一个个问题搞得头都大了. 首先,啥都不管,先在iPhone X上运行起来看看 ...
- 跨域请求CORS
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS http://www.ruanyifeng.com/b ...
- javascript 备忘 细节 相关
DOMContentLoaded事件触发时机,即dom tree完成但页面未必渲染完毕. var a = [1,2,3,4]; var length = a.length; alert((leng ...
- rewirte 规则
Nginx Rewrite Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则 表达式是基于 Perl 语言.通常而言,几乎所有的 WEB 服务器均可以支持 ...