终于回来了邮递员送信

2024-02-04 12:18
文章标签 终于 邮递员 回来 送信

本文主要是介绍终于回来了邮递员送信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

暑假里很忙,计算机也有好几次集训,做了些好题,接下来几天会分享一下。

邮递员送信

(post.pas/c/cpp)
【 题目描述】
有一个邮递员要送东西, 邮局在节点 1。 他总共要送 N-1 样东西, 其目的地分别是 2~
N。 由于这个城市的交通比较繁忙, 因此所有的道路都是单行的, 共有 M 条道路, 通过每条
道路需要一定的时间。 这个邮递员每次只能带一样东西。 求送完这 N-1 样东西并且最终回到
邮局最少需要多少时间。
【 输入格式】
输入文件第一行包含两个正整数 N 和 M;
接下来 M 行, 每行三个正整数 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
【 数据规模】
对于 30%的数据: 1≤N≤200;
对于 100%的数据: 1≤N≤1,000; 1≤M≤100,000; 1≤U≠V≤N; 1≤W≤10,000;


本题的难点在于数据范围。
此题的思路十分简单,求取每个点到点1的距离和点1到每个点的距离。所以,乍一看就是弗洛伊德。求每个点之间的距离,但是n的范围是1000。 1000数据无法过n³。
于是只能用Dijkstra,SPFA等更快的算法。但是用这些算法如何求取点i到1的距离呢? 此题需要用到反向建图。
这里写图片描述

例如此图,正向SPFA可知 f[1][2]=4,f[1][3]=15。即dis[2]=4,dis[3]=15
同时我们可以知道,f[2][1]=18,f[3][1]=7。如果将i,j反过来,则是f[1][2]=18,
f[1][3]=7。因此,只要我们反过来,令f[i][j]=f[j][i]。再做一遍SPFA,即可
求出n点到1点的距离。
例如此图,使f[1][3]=f[3][1]=7,f[3][2]=f[2][3]=11。则3至1的距离就等于f[1][3]=7。这样,就可以求出1为终点的值。

下面是代码(很丑很长很silly,高手勿喷)

#include<cstdio>
#include<cstdlib>
using namespace std;
int i,j,k,n,m,tot,ans;
int f[1005][1005],dis[1005],u[1005][1005],q[10005],num[10005],q1[1000005],num1[1000005],f1[1005][1005];
int read(){char c;int x;while(c=getchar(),c<'0'||c>'9');x=c-'0';while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0';return x;
}
int min(int a,int b){return a<b?a:b;}
int main()
{n=read();m=read();for(register int i=1;i<=n;i++) for(register int j=1;j<=n;j++)if(i!=j){f[i][j]=2000000;f1[i][j]=2000000;}else {f[i][j]=0;f1[i][j]=0;}for(register int i=1;i<=n;i++) dis[i]=2000000;for(register int i=1;i<=m;i++){int x=read(),y=read(),z=read();f[x][y]=min(f[x][y],z);f1[y][x]=min(f1[y][x],z);}int head=0,tail=1;q[tail]=1;dis[1]=0;num[tail]=0;while(head<tail){head++;for(register int i=1;i<=n;i++){if(f[q[head]][i]+num[head]<dis[i]&&i!=q[head]){q[++tail]=i;dis[i]=f[q[head]][i]+num[head];num[tail]=num[head]+f[q[head]][i];}}}for(register int i=1;i<=n;i++) ans+=dis[i];for(register int i=1;i<=n;i++) dis[i]=2000000;int h=0,t=1;q1[t]=1;dis[1]=0;num1[t]=0;while(h<t){h++;for(register int i=1;i<=n;i++){if(f1[q1[h]][i]+num1[h]<dis[i]&&i!=q1[h]){q1[++t]=i;dis[i]=f1[q1[h]][i]+num1[h];num1[t]=num1[h]+f1[q1[h]][i];}}}for(register int i=1;i<=n;i++) ans+=dis[i];printf("%d",ans);return 0;
}

这篇关于终于回来了邮递员送信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677475

相关文章

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

终于解决了excel操作及cspreadsheet.h问题

困扰多日的excel操作问题终于解决:利用cspreadsheet.h!在vs2005下,不能直接应用cspreadsheet.h,所以必须解决些问题先。 首先, 出现暴多错误。解决UNICODE问题,全部添加L。 [1] +++++++++++++++++++ 其次, 出现问题: error   C2664:   &apos;SQLGetInstalledDriversW &apos;

Spark 全套知识体系,终于搞到了!

福利手慢无 ☆☞ 廖雪峰的大数据开发必备教程-Spark视频资料终于免费啦!限额领取~ 2019年已过去3/4,年初许下的愿实现了吗?可爱的程序员们都有哪些愿望呢? 找个女朋友。升级电脑、键盘、鼠标等。来一次说走就走的旅行。升职&加薪。…… 说起“升职&加薪”,一向“多金”的程序员们,今年的职场晋升似乎并非那么顺畅。说是大环境所致,这也没错。 但有一部

终于知道如何简化时间序列的特征工程了!

在处理时间序列数据时,时间特征往往是最基础且独特的要素,我们的目标通常是预测某种未来的响应或结果。 不过在很多情况下,除了时间特征之外,我们还能获取到一系列其他相关的特征或变量。 时间序列数据中的特征工程涉及从原始时间序列数据中创建信息丰富的特征,以提升机器学习模型的性能。 以下是时间序列数据中一些常见的特征类型: 日期时间相关特征: 这些特征是从日期时间列中提取的,如月份、日期、星期

Infosys面试回来,我想和Java程序员谈一谈

http://toutiao.com/a6332993280045924610/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5367969992&utm_medium=toutiao_ios

新换了电脑,电脑里常用的6款软件,下载回来继续用

新换了电脑,准备把之前电脑里常用的几款软件都下载回来继续用,独乐乐不如众乐乐,分享一下~ 1、Listen 1 一款开源、免费的音乐播放器,它能够整合多个主流音乐平台的资源,包括网易云音乐、QQ音乐、酷狗音乐、酷我音乐、Bilibili和咪咕音乐等,可以在一个应用中搜索和播放来自不同平台的音乐。 支持Windows、macOS、Linux,以及Chrome和Firefox浏览器插件版,还有安卓

WebGL on iOS8 终于等到了这一天

WWDC2014刚结束,这次的大会是名符其实的开发者大会,更贴切的应该说的确是一次软件开发者的大会,对于OSX和iOS的更多功能特性让人兴奋,Swift新语言促成了如上图片 但我更感兴趣的是WebGL终于官方的在OSX和iOS上得到了支持,这篇《A first look at what iOS8 means for Phaser and Pixi.js》分享了在iOS下运行We

计算机同等学力申硕终于出成绩了

2024年同等学力统考成绩已于8月28日10时开通成绩查询 昨天和今天有很多网友发来考试通过的消息,考试通过的人喜笑颜开 就比如上面这位兄弟一次性通过两科,他的特点就是比较有耐力,坚持看视频做历年真题。 有人喜有人悲,有的就差一哆嗦,有点小遗憾 不是谁随便就能成功,我是考了三次才过(综合科目),一次20,二次24,三次79 考试这东西其实没有捷径可走,唯一好的方法就是

终于!我找到了开发的得力助手!阿里云天池云原生编程挑战赛参赛攻略

作者:ysevenk_7 参赛准备 我是机缘巧合在 6 月底了解到了天池云原生编程挑战赛,于是乎搜了一下,之前本人对于比赛并没有太多经验,看了大赛介绍之后莫名兴奋,果断拉了队友报名,完成认证、起队名、下载插件注册等准备任务,然后根据官方给出的赛题进行选择,由于我对开源的经验非常少,束手束脚,对于选题只是盲目的看了所使用的技术栈是否匹配,并没有考虑其他因素,于是选择了几天的项目后,看到项目诉求中

微信重大更新!3.0 终于来了!

蜗牛带你看看微信大版本更新的内容! 你可能不知道,微信最近做了重大版本更新! 过去一般是在移动端,这次在 PC 端也看到了重大变化,那就是微信 3.0! 我们来看看都更新了哪些内容。 第一条就很劲爆,可以在电脑端浏览朋友圈了! 以前你想刷朋友圈的时候还得拿起个手机,但如果你工作中这么干,很容易被人发现你在摸鱼。 电脑端有这功能就好很多了,再也不用担心摸鱼会不会被发现了~就问你开不开心! 第