BZOJ2259 [Oibh]新型计算机

话说hzwer你在坑爹?、、、

我按照你的建图交了上去,发现WA。

开始检查= =。。。过了好久,突然觉得画风不对。。。hzwer您建图错了啊!!!

后来看了看zyk的终于知道了怎么回事>_<

 1 /**************************************************************
 2     Problem: 2259
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:3220 ms
 7     Memory:52884 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <algorithm>
12 #include <cstring>
13 #include <queue>
14
15 using namespace std;
16 typedef long long ll;
17 const int N = 1000005;
18 const int M = 3000005;
19
20 int n, tot;
21 int dis[N], first[N];
22 bool vis[N], pre[N], nxt[N];
23
24 struct edges {
25     int next, to, v;
26     edges() {}
27     edges(int _n, int _t, int _v) : next(_n), to(_t), v(_v) {}
28 } e[M];
29
30 struct heap_node {
31     int v, to;
32     heap_node() {}
33     heap_node(int _v, int _to) : v(_v), to(_to) {}
34
35     inline bool operator < (const heap_node &b) const {
36         return v > b.v;
37     }
38 };
39
40 priority_queue <heap_node> h;
41
42 inline int read() {
43     int x = 0;
44     char ch = getchar();
45     while (ch < ‘0‘ || ‘9‘ < ch)
46         ch = getchar();
47     while (‘0‘ <= ch && ch <= ‘9‘) {
48         x = x * 10 + ch - ‘0‘;
49         ch = getchar();
50     }
51     return x;
52 }
53
54 void add_edge(int x, int y, int z) {
55     e[++tot] = edges(first[x], y, z);
56     first[x] = tot;
57 }
58
59 inline void add_to_heap(const int p) {
60     for (int x = first[p]; x; x = e[x].next)
61         if (dis[e[x].to] == -1)
62             h.push(heap_node(e[x].v + dis[p], e[x].to));
63 }
64
65 void Dijkstra(int S) {
66     memset(dis, -1, sizeof(dis));
67     while (!h.empty()) h.pop();
68     dis[S] = 0, add_to_heap(S);
69     int p;
70     while (!h.empty()) {
71         if (dis[h.top().to] != -1) {
72             h.pop();
73             continue;
74         }
75         p = h.top().to;
76         dis[p] = h.top().v;
77         h.pop();
78         add_to_heap(p);
79     }
80 }
81
82 int main() {
83     int i, j, x;
84     n = read();
85     for (i = 1; i <= n; ++i) {
86         x = read();
87         for (j = i + 1; j <= min(i + x + 1, n) && !pre[j]; ++j)
88             pre[j] = 1, add_edge(j, j - 1, 1);
89         for (j = i + x + 1; j <= n && !nxt[j]; ++j)
90             nxt[j] = 1, add_edge(j, j + 1, 1);
91         if (i + x <= n) add_edge(i, i + x + 1, 0);
92         else add_edge(i, n + 1, i + x - n);
93     }
94     Dijkstra(1);
95     printf("%d\n", dis[n + 1]);
96     return 0;
97 }

时间: 2024-08-06 15:53:46

BZOJ2259 [Oibh]新型计算机的相关文章

[bzoj2259][Oibh]新型计算机_Dijkstra

新型计算机 bzoj-2259 Oibh 题目大意:给定一个n个数的数列,第i个数为a[i],更改第i个数至x的代价为|x-a[i]|.求最小代价,使得:读入一个数s1后,向后连着读s1个数,然后如s2,再向后读s2个数.保证最后恰好读到第n个数. 注释:$1\le n\le 10^6$ 想法:又开始了... ...在那里一顿dp... 结果又是一个图论题.. ..这场面好熟悉 我们直接从第i个数像第i+a[i]连一条边权为0的边.然后这时我们思考暴力怎么做?暴力的话从i+a[i]开始像左右依次

【BZOJ2259】[Oibh]新型计算机 最短路

[BZOJ2259][Oibh]新型计算机 Description Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算机的输入也很独特,假设输入序列中有一些数字(都是自然数——自然数包括0),计算机先读取第一个数字S1,然后顺序向后读入S1个数字.接着再读一个数字S2,顺序向后读入S2个数字……依此类推.不过只有计算机正好将输入序列中的数字读完,它才能正确处理数据,否则计算机就会进行自毁性操

bzoj 2259 [Oibh]新型计算机 ——最短路(建图)

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2259 不是 n^2 条边!连那条边权为0的边之后,只要每个位置向它的前一个位置和后一个位置连 1 的边,就能等价于一开始就走到那个位置了. 不会有情况使得操作后 a[ i ] 变成负数来走到 j .因为那样一定不如走到 i 的时候别走到 i 而是直接走到 j . 注意1号点.如果每个点都向后连 1 的边,最大代价岂不是不大于 n ?所以 1 不能向 2 连边权为1的边,因为1是起点,没有转

Google的量子计算之梦:比传统计算机快上1亿倍?

Google的量子计算之梦:比传统计算机快上1亿倍? 本文来自technologyreview,作者 Tom Simonite ,机器之心编译出品,参与:salmoner,薛矽,汪汪,微胖. 近日,谷歌宣布他们的量子计算机比传统计算机快上1亿倍,有人欢呼雀跃,有人提出质疑.让我们来看看背后的故事吧,看看物理学家John Martinis 如何帮谷歌实现炙手可热的量子计算之梦.他或许正手握着量子计算的圣杯,本文选自麻省理工科技评论. Martini团队追寻的神奇计算机 John Martinis用

计算机

计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机.可分为超级计算机.工业控制计算机.网络计算机.个人计算机.嵌入式计算机五类,较先进的计算机有生物计算机.光子计算机.量子计算机等.    计算机发明者约翰·冯·诺依曼.计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其

题目12:计算机芯片的发展历史

引用: http://wenku.baidu.com/view/d1d46c0ef78a6529647d5331.html http://www.docin.com/p-230059948.html 基本概念 计算机芯片:芯片组决定了主板的功能,是主板的灵魂. 分类:北桥芯片.南桥芯片. 北桥芯片提供对CPU的类型和主频.内存的类型和最大容量.ISA/PCI/AGP插槽.ECC纠错等支持.南桥芯片则提供对KBC(键盘控制器).RTC(实时时钟控制器).USB(通用串行总线).Ultra DMA/

计算机专业考研方向2011考研

计算机专业考研方向2011考研1  计算机系统结构计算机系统结构二级学科研究并行分布计算.新型计算机.计算机网络与通信.嵌入式系统.集成电路设计.信息存储.可信计算与容错计算等方向.其排名如下: 排名   校名   等级   排名   校名   等级   1   清华大学   A++   10   吉林大学   A   2   浙江大学   A++   11   电子科技大学   A   3   华中科技大学   A+   12   北京邮电大学   B+   4   北京大学   A+   1

计算机考研方向

本文复制了网上的一些资料,为了方便自己以后查阅. 摘自:百度知道 若比邻001的回答 在考研中计算机科学与技术属于工学门类里的一级学科,其有分为三个二级学科:分别是计算机系统结构,计算机软件与理论,计算机应用,每个二级学科下面又分若干研究方向,相关信息如下: 1.计算机系统结构 计算机系统结构二级学科研究并行分布计算.新型计算机.计算机网络与通信.嵌入式系统.集成电路设计.信息存储.可信计算与容错计算等方向. 2.计算机软件与理论 计 算机软件与理论主要包括软件设计.开发.维护和使用过程中涉及的

计算机发展趋势

计算机已经从功能单一.体积较大发展到了功能复杂.体积微小.资源网络化等. 计算机的未来充满了变数,性能的大幅度提高是不可置疑的,而实现性能的飞跃却有多种途径.性能的大幅提升并不是计算机发展的唯一路线,计算机的发展还应当变得越来越人性化,同时也要注重环保等等. 计算机从出现至今,编程语言经历了机器语言.汇编语言.高级语言:操作系统经历了简单操作系统和Linux.Macos.BSD.Windows等现代操作系统四代, 运行速度也得到了极大的提升,第四代计算机的运算速度已经达到几十亿次每秒. 计算机也