注意:本博客代码被黑心数据Hack,有空补回来

啊啊啊这道难题总算是做出来了,首先是帅比浮云的题解发出来一下:http://www.cnblogs.com/fuyun-boy/p/5922742.html

原题目地址:https://www.luogu.org/problem/show?pid=2832

题目背景

小X来到了山区,领略山林之乐。在他乐以忘忧之时,他突然发现,开学迫在眉睫

题目描述

山区有n座山。山之间有m条羊肠小道,每条连接两座山,只能单向通过,并会耗费小X一定时间。

小X现在在1号山,他的目的是n号山,因为那里有火车站。

然而小X的体力是有限的。他每通过一条羊肠小道,就会变得更疲劳,导致他通过任意一条羊肠小道的时间都增加1。

输入输出格式

输入格式:

第一行两个数,n,m

第2行到第m+1行,每行3个数A,B,C,表示A、B之间有一条羊肠小道,可以让小X花费C的时间从A移动到B

输出格式:

两行 第一行一个数T,表示小X需要的最短时间

第二行若干个数,用空格隔开,表示小X的移动路线

例:1 4 2 5表示:小X从1号山开始,移动到4号山,再到2号山,最后到5号山。

输入输出样例

输入样例#1:

5 8
2 4 2
5 2 1
1 2 1
4 3 2
1 3 3
4 5 2
1 5 8
3 5 3

输出样例#1:

7
1 3 5

说明

n<=10000, m<=200000

数据保证没有多条最短路径

【题解】

这道题就是最短路的变体,不过从起点到终点每多走一条边就要多加一点权值。

比如说原来的权值是6+7+9+3+5,之后的权值就是6+(7+1)+(9+2)+(3+3)+(5+4)了。

下面的这个是我写的代码。我的解决方法就是加上两个数组,一个是r,一个是tr。

d数组还是spfa一如既往的d数组,是除去这道题额外的条件的数组。

tr数组是补充数组(废话),d[i]+tr[i]表示从起点走到这个点的最小花费。

r[i]是按照从起点走到第i个节点花费d[i]+tr[i]的最短路径时,最后一次的增加值。

比如说上面的那个6+(7+1)+(9+2)+(3+3)+(5+4),表示一条路径,则这条路径终点节点的r数组的值是4。

因为走到这里最后一次加上的数字是4。

pre数组不说了,帅比浮云说了很清楚。。。

#include <cstdio>
#include <cstring>
#include <queue>
#define mp make_pair
using namespace std;
int n,m,h;
struct edge
{int v,w;edge*next;
};
edge* link[10001];
int d[10001],r[10001],tr[10001],pre[10001];
bool v[10001];
void add(int u,int v,int w)
{edge* p=new edge;p->v=v;p->w=w;p->next=link[u];link[u]=p;
}
void del(edge* p)
{if(p!=NULL){del(p->next);delete p;}
}
void spfa()
{queue<int>q;memset(d,0x3f,sizeof(d));d[1]=0;q.push(1);v[1]=true;while(!q.empty()){int x=q.front();q.pop();v[x]=false;for(edge* p=link[x];p!=0;p=p->next){if(d[x]+tr[x]+p->w+r[x]<d[p->v]+tr[p->v]){d[p->v]=d[x]+p->w;tr[p->v]=tr[x]+r[x];r[p->v]=r[x]+1;pre[p->v]=x;if(v[p->v]==false){v[p->v]=true;q.push(p->v);}}}}
}
void print(int n)
{if(n!=1)print(pre[n]);printf("%d ",n);
}
int main()
{int CO2,H2O,H2CO3;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&CO2,&H2O,&H2CO3);add(CO2,H2O,H2CO3);}spfa();printf("%d\n",d[n]+tr[n]);print(n);for(int i=1;i<=n;i++)del(link[i]);return 0;
}

祝各位NOIP2016 RP++ SCORE++

转载于:https://www.cnblogs.com/oier/p/6036492.html

SPFA+寻路(行路难,洛谷2832)相关推荐

  1. [spfa][差分约束] 洛谷 P3084 照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  2. #0/1分数规划,SPFA,负环#洛谷 1768 天路

    题目链接 分析 可以发现,这是一道0/1分数规划的题目,需要二分答案,然后判定是否存在负环,所以说bfs貌似不高效,那就用dfs吧,若二分答案为0,即不合法 代码 #include <cstdi ...

  3. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA

    洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...

  4. 洛谷:P2832 行路难(堆优化Dijkstra(错解)bfs(正解) + 记录路径)

    洛谷:P2832 行路难 写这道题确实是行路难- 此题的最短路约束不只是边权,还有边数(每经过一条边,之后经过的边权值都 +1+1+1 ) 从期望的角度分析,我们肯定是想 尽可能走的路程越短,走得路径 ...

  5. 洛谷 P3371 【模板】单源最短路径(弱化版)【最短路】【spfa】

    洛谷 P3371 [模板]单源最短路径(弱化版) 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P3371 [模板]单源最短路径(弱化版) ...

  6. 洛谷日报 2020年3月前索引

    2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https://www.luo ...

  7. 洛谷日报索引(2020、2019、2018)

    历年洛谷日报索引 2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https: ...

  8. Bzoj4016/洛谷P2993 [FJOI2014] 最短路径树问题(最短路径问题+长链剖分/点分治)

    题面 Bzoj 洛谷 题解 首先把最短路径树建出来(用\(Dijkstra\),没试过\(SPFA\)\(\leftarrow\)它死了),然后问题就变成了一个关于深度的问题,可以用长链剖分做,所以我 ...

  9. 【杂题总汇】NOIP2013(洛谷P1967) 货车运输

    [洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...

最新文章

  1. 02.Python基础
  2. TF之NN:利用神经网络系统自动学习散点(二次函数+noise+优化修正)输出结果可视化(matplotlib动态演示)
  3. LOG4J 警告错误处理办法(转)
  4. 禁止复制粘贴_网页禁止复制粘贴? 教你5招, 绕过网页限制, 免费复制全网内容!...
  5. .NET 6 使用 Obfuscar 进行代码混淆
  6. Volcano plot | 别再问我这为什么是火山图
  7. 洛谷P2134 百日旅行
  8. Flink 合流水位线图解
  9. php yat grpc,PHP GRPC 模块安装配置-Go语言中文社区
  10. 安装apache 后,找不到服务,解决办法
  11. 安全应急响应工作中易犯的5大错误
  12. xp系统的无线配置服务器,Windows XP系统下无线网卡配置及安装
  13. 内网服务器做了映射还是无法用公网访问,内网PC无法使用服务器NAT映射后的公网地址访问服务器的故障分析...
  14. 一根竹子,4天的生长过程
  15. PCB需要清洗的技巧
  16. 【翻译】iOS Swift Moya从入门到精通,优雅、安全的Alamofire
  17. 使用Flexible.js实现手机端网页内容适配(rem适配法)
  18. 移动web开发要点总结
  19. 计算机经常突然死机重启,家里电脑最近经常会出现重启死机的现象是什么原因?...
  20. 如何让网页显示友好的错误信息页面

热门文章

  1. 对话祁隆《借我星光》作词人温暖:已获知和合国际收购信息
  2. 2022元宇宙十大商业魔咒
  3. OpenGl入门基础知识-叩开3D的心扉
  4. android studio 两个工程 引用同一个库,一个可以,另一个不可以
  5. 经典网页设计:30个创意的 CSS 应用案例
  6. bzoj 4864: [BeiJing 2017 Wc]神秘物质 splay
  7. Android系统自定义关机充电图标
  8. 【新观点】孙悟空其实是太上老君炼的丹药变成的
  9. 计算机专业学习阶段计划书怎么写,计算机专业学习计划优秀范文2篇
  10. 人生苦短,我用Python;平台无限多,最棒大蟒蛇anaconda!