晴天小猪历险记之Hill(Dijkstra优先队列优化)
描述
这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。
山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走。山是环形的。(注意:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段)。
晴天小猪从山的左下角出发,目的地为山顶,即隐者的小屋。
格式
输入格式
第一行有一个数n(2<=n<=1000),表示山的高度。
从第二行至第n+1行,第i+1行有i个数,每个数表示晴天小猪在这一段山路上需要爬的时间。
输出格式
一个数,即晴天小猪所需要的最短时间。
限制
各个测试点1s
思路:最短路,关键是建图,建图之后用Dijkstra优先队列优化最短路一下即可。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<queue>
5 #include<stdlib.h>
6 #include<string.h>
7 #include<queue>
8 #include<vector>
9 using namespace std;
10 void dj(int n,int ans);
11 typedef long long LL;
12 int ma[1002][1002];
13 int biao[1002][1002];
14 int d[600000];
15 typedef struct node
16 {int to;
17 int cost;
18 bool operator<(node&cx)const
19 {
20 return cx.cost<cost;
21 }
22 }ss;
23 typedef pair<int,int>P;
24 vector<ss>vec[600000];
25 priority_queue<P,vector<P>,greater<P> >que;
26 int main(void)
27 {
28 int i,j,k,p,q;
29 scanf("%d",&k);
30 int cnt=1;
31 for(i=1; i<=k; i++)
32 {
33 for(j=1; j<=i; j++)
34 {
35 scanf("%d",&ma[i][j]);
36 biao[i][j]=cnt++;
37 }
38 }ss MM;
39 for(i=k; i>=2; i--)
40 {
41 for(j=1; j<=i; j++)
42 {
43 if(j==1)
44 {
45 int x=biao[i][j];
46 int y=biao[i][j+1];
47 int z=biao[i][i];
48 int xx=biao[i-1][j];
49 int uu=biao[i-1][i-1];
50 MM.to=y;MM.cost=ma[i][j+1];
51 vec[x].push_back(MM);
52 MM.to=z;MM.cost=ma[i][i];
53 vec[x].push_back(MM);
54 MM.to=xx;MM.cost=ma[i-1][j];
55 vec[x].push_back(MM);
56 MM.to=uu;MM.cost=ma[i-1][i-1];
57 vec[x].push_back(MM);
58 }
59 if(j==i)
60 {
61 int x=biao[i][j];
62 int y=biao[i][j-1];
63 int z=biao[i-1][j-1];
64 int xx=biao[i][1];
65 int yy=biao[i-1][1];
66 MM.to=y;MM.cost=ma[i][j-1];
67 vec[x].push_back(MM);
68 MM.to=z;MM.cost=ma[i-1][j-1];
69 vec[x].push_back(MM);
70 MM.to=xx;MM.cost=ma[i][1];
71 vec[x].push_back(MM);
72 MM.to=yy;MM.cost=ma[i-1][1];
73 vec[x].push_back(MM);
74 }
75 else
76 {
77 int x=biao[i][j];
78 int y=biao[i][j-1];
79 int z=biao[i][j+1];
80 int xx=biao[i-1][j];
81 int yy=biao[i-1][j-1];
82 MM.to=y;MM.cost=ma[i][j-1];
83 vec[x].push_back(MM);
84 MM.to=z;MM.cost=ma[i][j+1];
85 vec[x].push_back(MM);
86 MM.to=xx;MM.cost=ma[i-1][j];
87 vec[x].push_back(MM);
88 MM.to=yy;MM.cost=ma[i-1][j-1];
89 vec[x].push_back(MM);
90 }
91 }
92 }dj(k,biao[k][i]);
93 printf("%d ",d[1]);
94 return 0;
95 }
96 void dj(int n,int ans)
97 { int N=1e8;
98 fill(d,d+600000,N);
99 d[ans]=ma[n][1];
100 que.push(P(d[ans],ans));
101 while(!que.empty())
102 {P UU=que.top();que.pop();
103 int v=UU.second;
104 if(d[v]<UU.first)continue;
105 for(int i=0;i<vec[v].size();i++)
106 {
107 node K=vec[v][i];;
108 if(K.cost+d[v]<d[K.to])
109 {
110 d[K.to]=K.cost+d[v];
111 que.push(P(d[K.to],K.to));
112 }
113 }
114 }
115 }
晴天小猪历险记之Hill(Dijkstra优先队列优化)的更多相关文章
- Vijos1006P1006晴天小猪历险记之Hill[最短路]
P1006晴天小猪历险记之Hill Accepted 标签:晴天小猪历险记[显示标签] 背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结……不过有一 ...
- 地铁 Dijkstra(优先队列优化) 湖南省第12届省赛
传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /******************************** ...
- vijosP1006 晴天小猪历险记之Hill
vijosP1006 晴天小猪历险记之Hill 链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本 ...
- 【bzo1579】拆点+dijkstra优先队列优化+其他优化
题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少 ...
- 最短路--dijkstra+优先队列优化模板
不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue&g ...
- (模板)poj2387(dijkstra+优先队列优化模板题)
题目链接:https://vjudge.net/problem/POJ-2387 题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路. 思路:dijkstra ...
- 【vijos】1006 晴天小猪历险记之Hill(dijkstra)
https://vijos.org/p/1006 连边后跑点权的最短路 注意连边的时候左端点可以连到下一行的右端点,右端点可以连到下一行的左端点 #include <cstdio> #in ...
- Dijkstra + 优先队列优化 模板
#include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...
- Dijkstra优先队列优化
Dijkstra算法的核心思想就是两步排序,一个是对于一个点而言,他的最小边要经过所有其他点最小边的测试才能确认,也就是说要在这其中找一个最大的边出来:第二个是对于每次循环而言的,每次的更新d数组都是 ...
随机推荐
- do{...}while(0)的用法
零.导引第一次见到 do{...}while(0)是在学习libevent的时候,看到里面有很多类似#define TT_URI(want) do { \ char *ret = evhttp_uri ...
- SpringBoot整合Shiro 二:Shiro配置类
环境搭建见上篇:SpringBoot整合Shiro 一:搭建环境 Shiro配置类配置 shiro的配置主要集中在 ShiroFilterFactoryBean 中 关于权限: anon:无需认证就可 ...
- ssm框架整合 — 更新完毕
1.spring整合mybatis 数据表自行搭建 ,我的结构如下: 1).导入依赖 <!-- spring整合mybatis的依赖 --> <!-- 1.spring需要的依赖 - ...
- 日常Java 2021/9/29
StringBuffer方法 public StringBuffer append(String s) 将指定的字符串追加到此字符序列. public StringBuffer reverse() 将 ...
- day28 进程(Process)
day28 进程(Process) 1.进程的概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. # 进程是系统进行 ...
- 零基础学习java------day6----数组
0. 内容概览 补充:main方法中的数组 1. 数组的概述 概念: 用来存储一组相同数据类型的集合(或者叫容器) 注意事项: 1. 数组中的元素类型必须一致 2. 数组本身是引用数据类型,但是里面的 ...
- 容器的分类与各种测试(三)——deque
deque是双端队列,其表象看起来是可以双端扩充,但实际上是通过内存映射管理来营造可以双端扩充的假象,如图所示 比如,用户将最左端的buff用光时,map会自动向左扩充,继续申请并映射一个新的buff ...
- winxp 关闭445端口
关闭445端口的方法方法很多,但是我比较推荐以下这种方法: 修改注册表,添加一个键值 Hive: HKEY_LOCAL_MACHINE Key: System\Controlset\Services\ ...
- ython学习笔记(接口自动化框架 V2.0)
这个是根据上次框架版本进行的优化 用python获取excel文件中测试用例数据 通过requets测试接口.并使用正则表达式验证响应信息内容 生成xml文件测试报告 版本更新内容: 1. 整理了Cr ...
- Virtual Destructor
Deleting a derived class object using a pointer to a base class that has a non-virtual destructor re ...