【题目来源】
https://www.luogu.com.cn/problem/P2349

【题目描述】
有一盗墓者潜入一金字塔盗宝。当她(难道是 Lara Croft ?)打开一个宝箱的时候,突然冒出一阵烟(潘多拉的盒子?),她迅速意识到形势不妙,三十六计走为上计……由于她盗得了金字塔的地图,所以她希望能找出最佳逃跑路线。地图上标有 N 个室,她现在就在 1 室,金字塔的出口在 N 室。她知道一个秘密:那阵烟会让她在直接连接某两个室之间的通道内的行走速度减半。她希望找出一条逃跑路线,使得在最坏的情况下所用的时间最少。

【输入格式】
输入文件的第一行有两个正整数 N(3≤N≤100)和 M(3≤M≤2000);
N表示金字塔的出口所在的N室;
M表示有 M 行数据,每行有三个数正整数 U 、V 、W,表示直接从 U 室跑到 V 室(V 室跑到 U 室)需要 W(3≤W≤255)秒。

【输出格式】
输出所求的最少时间(单位为秒)。

【输入样例】
7 8
1 2 10
2 3 12
3 4 20
4 7 8
1 7 34
2 5 10
5 6 12
6 4 13

【输出样例】
66

【说明/提示】
样例解释 Sample Explan:
基本上有三种路线:
(1)1→2→3→4→7。
总时间为:10+12+20+8=50,最坏的情况是“ 3→4 ”那一段,要多花 20 秒(因为行走速度减半),所以这条路选最坏需要 70 秒;
(2)1→2→5→6→4→7。
总时间为:10+10+12+13+8=53,最坏的情况是“ 6→4 ”那一段,要多花 13 秒,所以这条路选最坏需要 66 秒;
(3)1→7。
总时间为:34=34,最坏的情况是“ 1→7 ”那一段,要多花 34 秒,所以这条路选最坏需要 68 秒。

【算法代码】

/* 链式前向星存图
val[idx] 表示第 idx 条边的权值。
e[idx] 表示第 idx 条边的终点。
ne[idx] 表示与第 idx 条边同起点的最近一次被添加的边的编号。
h[a] 表示以结点 a 为起点的最近一次被添加的边的编号。这个表述是在使用 ne[idx]=h[a] 时,也即使用 h[a]=idx++ 更新 h[a] 之前而言的。要特别注意这个语境。
*/#include<bits/stdc++.h>
using namespace std;int n,m;const int maxn=105;
const int maxm=2005;// Undirected edges are special directed edges, open double
int e[maxm<<1],ne[maxm<<1],h[maxn],val[maxm<<1],idx;void add(int a,int b,int w) {val[idx]=w,e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}int ans=0x3f3f3f3f;
void dfs(int from,int cur,int maxv,int sum) { //maxv:max value of current pathif(sum+maxv>ans) return;if(cur==n) {ans=min(sum+maxv,ans);return;}for(int j=h[cur]; j!=-1; j=ne[j]) {int t=e[j];if(t==from) continue;dfs(cur,t,max(maxv,val[j]),sum+val[j]);}
}int main() {cin>>n>>m;memset(h,-1,sizeof(h));for(int i=1; i<=m; ++i) {int x,y,z;scanf("%d%d%d",&x,&y,&z);add(x,y,z);add(y,x,z);}dfs(0,1,0,0);cout<<ans<<endl;
}/*
in:
7 8
1 2 10
2 3 12
3 4 20
4 7 8
1 7 34
2 5 10
5 6 12
6 4 13out:
66
*/

【参考文献】
https://www.luogu.com.cn/problem/solution/P2349
https://blog.csdn.net/qq_44343213/article/details/102957651
https://blog.csdn.net/m0_46304383/article/details/113457800

洛谷 P2349:金字塔 ← 链式前向星 dfs相关推荐

  1. 洛谷 P1352 没有上司的舞会【树形DP/邻接链表+链式前向星】

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  2. 【模板】链式前向星+spfa

    洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...

  3. 迪杰斯特拉最全详解(朴素版,堆优化+邻接表存图/链式前向星存图)

    迪杰斯特拉 迪杰斯特拉算法分析 迪杰斯特拉(朴素版) 迪杰斯特拉堆优化(邻接表存图) 迪杰斯特拉堆优化(链式前向星存图) 最短路--spfa(链式前向星存图) 迪杰斯特拉算法分析 一般用三种数据结构存 ...

  4. 数据结构【链式前向星】

    第一次接触链式前向星是在学习图论的迪杰斯特拉算法时,大佬们纷纷用链式前向星+堆优化+迪杰斯特拉解题,秀的我萌新懵的一批,当时不知道啥是链式前向星,不过随着越来越深入,这种结构见得越来越多,慢慢的就明白 ...

  5. Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]

    思路容易想,卡空间和时间就吐了 用链式前向星压缩空间,用getchar()一位一位读加快读入 #include <iostream> #include <cstdio> #in ...

  6. P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐

    题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...

  7. P1155 双栈排序(二分图的染色判断+链式前向星)

    P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...

  8. 邻接表存储(链式前向星)

    细节 链式前向星: head[i] 存储顶点i当前出边的编号 to[num] 存储当前出边的终点 w[num] 存储当前出边的权值 next[num] 存储上一条从顶点i出发的边的边号 N个顶点对应N ...

  9. 可持久化链表(链式前向星)

    http://codeforces.com/group/aUVPeyEnI2/contest/229670 1 /******************************************* ...

最新文章

  1. 手机被偷后如何让小偷不能用
  2. 精选 GitHub 值得收藏的100个前端项目
  3. java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响
  4. 深度学习(六)——CNN进化史
  5. 使用代码创建BRF ruleset
  6. 做安全操作系统,这位技术老兵是认真的!
  7. log4j记录exception异常有价值信息及log4j级别
  8. Java设计模式超详细
  9. c语言随机数猜数游戏
  10. 数理统计-5.3 统计量及其分布
  11. Windows 模拟弱网环境(Network Emulator for Windows Toolkit)
  12. html 下拉菜单自动填充,下拉框自动实现自动填充
  13. CMDB资产管理系统
  14. 猜拳游戏android代码,android 简易的猜拳小游戏
  15. 1+X Web前端(初级)理论题考试样题及答案(建议收藏)
  16. 联邦学习综述(二)——联邦学习的分类、框架及未来研究方向
  17. API调用,淘宝天猫、1688、京东、拼多多商品详情(接口数据聚全)
  18. python相关pyc文件的编译、运行和反编译
  19. 从拼多多回应“商家二选一声明”看其竞争“平常心”
  20. python 比价_爬虫+网站开发实例:电影票比价网

热门文章

  1. linux---socket编程(网络)
  2. 初探12306售票算法
  3. 被讨厌的勇气:“自我启发之父“阿德勒哲学课
  4. Olympiad (奥林匹克信息赛) Visual Judge (Set3)
  5. HDU-5327 Olympiad (前缀和水题)
  6. ROG电脑安装ubuntu双系统
  7. LinkNet:侧重语义分割的速度问题,算法思路类似 U-Net
  8. 「启蒙教育」对婴幼儿的发展有怎样的影响,哪些益智产品是有效的?
  9. paramiko SSH登录交换机
  10. 智能重复文件查找器:Gemini mac中文