https://vijos.org/p/1006

连边后跑点权的最短路

注意连边的时候左端点可以连到下一行的右端点,右端点可以连到下一行的左端点

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <vector>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
#define mkpii make_pair<int, int>
#define pdi pair<double, int>
#define mkpdi make_pair<double, int>
#define pli pair<ll, int>
#define mkpli make_pair<ll, int>
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define error(x) (!(x)?puts("error"):0)
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=1005*1005/2, oo=~0u>>2;
int ihead[N], len, cnt, d[N], vis[N], w[N];
struct dat { int to, next; }e[N<<2];
void add(int u, int v) {e[++cnt].next=ihead[u]; ihead[u]=cnt; e[cnt].to=v;
}
priority_queue<pii, vector<pii>, greater<pii> >q;
inline int id(int i, int j) { return ((i-1)+1)*(i-1)/2+j; }
void dij() {int n=id(len, len);for1(i, 1, n) d[i]=oo;d[1]=0; q.push(mkpii(0, 1));while(!q.empty()) {int u=q.top().second, v; q.pop(); if(vis[u]) continue; vis[u]=1;for(int i=ihead[u]; i; i=e[i].next) if(d[v=e[i].to]>d[u]+w[u]) {d[v]=d[u]+w[u];q.push(mkpii(d[v], v));}}
}int main() {read(len);for1(i, 1, len) {for1(j, 1, i) {int now=id(i, j);read(w[now]);if(i<len) add(now, id(i+1, j)), add(now, id(i+1, j+1));if(i>1 && i<len && j==1) add(now, id(i+1, i+1));if(i>1 && i<len && j==i) add(now, id(i+1, 1));int l=j-1; if(l<1) l=i;int r=j+1; if(r>i) r=1;if(i!=1) add(now, id(i, l)), add(now, id(i, r));}}dij();printf("%d\n", d[id(len, 1)]+w[id(len, 1)]);return 0;
}

  


背景

在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳、勇敢、善良、团结……
不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物。所以晴天小猪自告奋勇,要去采取这种药草。于是,晴天小猪的传奇故事便由此展开……

描述

这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。

山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走。山是环形的。(注意:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段)。

晴天小猪从山的左下角出发,目的地为山顶,即隐者的小屋。

格式

输入格式

第一行有一个数n(2<=n<=1000),表示山的高度。

从第二行至第n+1行,第i+1行有i个数,每个数表示晴天小猪在这一段山路上需要爬的时间。

输出格式

一个数,即晴天小猪所需要的最短时间。

样例1

样例输入1[复制]

5
1
2 3
4 5 6
10 1 7 8
1 1 4 5 6

样例输出1[复制]

10

限制

各个测试点1s

提示

在山的两侧的走法略有特殊,请自己模拟一下,开始我自己都弄错了……

来源

Sunnypig

转载于:https://www.cnblogs.com/iwtwiioi/p/4069535.html

【vijos】1006 晴天小猪历险记之Hill(dijkstra)相关推荐

  1. vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化

    题目链接:https://vijos.org/p/1006 数字三角形原题看这里:http://www.cnblogs.com/huashanqingzhu/p/7326837.html 背景 在很久 ...

  2. Vijos 1006 晴天小猪历险记之Hill 单源单汇最短路

    背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结-- 不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物.所以晴天小猪自告奋勇 ...

  3. vijosP1006 晴天小猪历险记之Hill

    vijosP1006 晴天小猪历险记之Hill 链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本 ...

  4. 18.03.06 vijos1006 晴天小猪历险记之Hill

    背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结-- 不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物.所以晴天小猪自告奋勇 ...

  5. Vijos 1029 晴天小猪历险记之Number【BFS+康托展开】

    Vijos 1029 背景 话说上一回,晴天小猪不畏千难万险.千辛万苦.千磨万难--终于爬上了那座深山,来到了那位隐者的小屋中,但它不知道,有一个问题正等待着它-- 晴天小猪一推开门,就发现那里--空 ...

  6. 晴天小猪历险记之Hill

    题目描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求 ...

  7. P1006晴天小猪历险记之Hill

    背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结-- 不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物.所以晴天小猪自告奋勇 ...

  8. voj1006 晴天小猪历险记之Hill

    背景 Background   在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结-- 不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种 ...

  9. 动态规划:晴天小猪历险记之Hill

    题目: 算法:动态规划 来源:vijos 题解1: 乍一看是一道数字金字塔. 再一看居然还能左右走! 再一看山居然是环形! 提示:先将前一层的状态转移上来再在同一层内左右移动 同一层内左右走如何处理: ...

最新文章

  1. Jquery 将表单序列化为Json对象
  2. Hbase原理、基本概念、基本架构
  3. Java操作MongoDB代码示例
  4. Java导出数据到Excel
  5. (php)实现万年历
  6. PWN-PRACTICE-BUUCTF-5
  7. 金属,塑料,傻傻分不清楚
  8. 对于纯Java项目,JVM 各个类加载器的加载目标是什么?
  9. Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析
  10. 如何强制gradle重新下载依赖项?
  11. python---之[::-1]
  12. RocketMQ的底层通信模块remoting 源码解析
  13. 关于H3C-WAP712C AP的胖瘦切换说明
  14. java系统课程设计报告_JAVA学生管理系统课程设计报告
  15. flash 图片有描边 html,Flash遮罩制作线条逐渐显示的汽车轮廓动画效果
  16. 元素周期表排列的规律_元素周期表的排列有什么规律?
  17. 计算机主板用料,【技嘉H55评测】主板供电篇——CPU辅助电源-中关村在线
  18. 远程唤醒、WOL、Magic_Packet
  19. WebIM Vue Demo 使用文档
  20. 与华为SIP硬终端(TE40)对接注意事项

热门文章

  1. Power Pivot报错:应用程序的组件中发生了未经处理的异常
  2. ESD镜像文件转换成ISO镜像文件解决方案
  3. oracle utl_file权限,Oracle内建包UTL_FILE使用说明
  4. Kafka(一):概述
  5. k8s(五):核心技术-Service
  6. Linux高级应用(十)控制蜂鸣器的应用程序
  7. 动态规划问题——最长公共子序列问题
  8. 《天龙八部》之《少年游》
  9. Excel VBA:更改图表数据标记大小和曲线粗细
  10. 和氟西汀类似的备注_氟西汀备注是什么意思 和氟西汀差不多的备注