新型计算机 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]开始像左右依次连边权为1,2,3...的边,然后Dijkstra即可,时空复杂度均为$O(n^2)$。如何优化这一过程?我们思考:其实这中的有些边是没有用的,我们只需要将相邻两个点之间连一条边权为1的边即可。然后堆优化Dij,时间复杂度为O(nlogn)。

正确性:我们发现:绝对值函数f(x)=|x|是一个偶函数,而且是一个线性偶函数,所以这东西支持在符号相同的情况下加减,在符号不同的情况下可以直接通过我们连的边退回去,证毕。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define N 1000010
#define mp make_pair
using namespace std;
priority_queue<pair<int,int> > pq;
int to[N<<2],nxt[N<<2],val[N<<2],head[N],tot;
int dis[N]; bool lv[N],rv[N],vis[N];
inline void add(int x,int y,int z)
{to[++tot]=y;val[tot]=z;nxt[tot]=head[x];head[x]=tot;
}
int main()
{int n; cin >> n ;for(int u,i=1;i<=n;i++){scanf("%d",&u);if(i+u>n) add(i,n+1,i+u-n);else add(i,i+u+1,0);for(int j=i+1;j<=i+u+1&&j<=n&&!lv[j];j++) lv[j]=1,add(j,j-1,1);for(int j=i+u+1;j<=n&&!rv[j];j++) rv[j]=1,add(j,j+1,1);}memset(dis,0x3f,sizeof(dis));pq.push(mp(0,1)),dis[1]=0;while(!pq.empty()){int u=pq.top().second; pq.pop();if(vis[u]) continue;vis[u]=1;for(int i=head[u];i;i=nxt[i])if(dis[to[i]]>dis[u]+val[i])dis[to[i]]=dis[u]+val[i],pq.push(mp(-dis[to[i]],to[i]));}printf("%d\n",dis[n+1]);return 0;
}

小结:图论真tm难... ...

转载于:https://www.cnblogs.com/ShuraK/p/9374987.html

[bzoj2259][Oibh]新型计算机_Dijkstra相关推荐

  1. bzoj2259 [Oibh]新型计算机

    [Oibh]新型计算机 Time Limit: 6 Sec Memory Limit: 128 MB Description Tim正在摆弄着他设计的"计算机",他认为这台计算机原 ...

  2. 【bzoj2259】[Oibh]新型计算机 堆优化Dijkstra

    题目描述 Tim正在摆弄着他设计的"计算机",他认为这台计算机原理很独特,因此利用它可以解决许多难题.  但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算机的输入也很 ...

  3. 新型计算机教学方式,电脑教学中的“新”

    摘 要: 职业高中电脑专业从设立至今,已经近二十年了.电脑的软件硬件.功能.操作使用方式都发生了很大的变化.在电脑教学上.对电脑的理解上,要推陈出新,与时俱进,才能跟得上时代的发展和需要.电脑教学中的 ...

  4. 生物计算机是未来型计算机吗,未来的新型计算机就是指生物计算机、量子计算机和光计算机。...

    问题:未来的新型计算机就是指生物计算机.量子计算机和光计算机. 更多相关问题 工业上利用下列反应制取金属Hg:4HgS+4CaO=4Hg+3X+CaSO4.该反应中X的化学式为A.CaSB.CaSO3 ...

  5. 巨型计算机是未来新型计算机吗,未来计算机技术展望

    未来计算机技术展望 1.前言 计算机的发展将趋向巨型化.微型化.网络化多媒体化和智能化.自从1944年世界上第一台电子计算机诞生以来,计算机技术迅猛发展,传统计算机的性能受到挑战,开始从基本原理上寻找 ...

  6. 计算机新型应用技术,一种新型计算机的制作方法

    本实用新型涉及计算机的技术领域,特别是涉及一种新型计算机. 背景技术: 众所周知,计算机是一种用于日常生活中,按照程序运行,自动.高速处理海量数据的现代化智能电子设备:现有的计算机包括底座.支座.显示 ...

  7. 不属于未来新型计算机的是光子计算机,光子计算机(三进制计算机很可怕么)

    光子计算机 1990年初,美国贝尔实验室制成世界上第一台光子计算机. 光子计算机是一种由光信号进行数字运算.逻辑操作.信息存贮和处理的新型计算机.光子计算机. 量子计算机全世界有一些,但是由于能耗大, ...

  8. 现有计算机键盘,一种新型计算机键盘的制作方法

    一种新型计算机键盘的制作方法 [技术领域] [0001]本实用新型主要涉及计算机领域,具体是一种新型计算机键盘. [背景技术] [0002]计算机键盘是把文字的控制信息输入计算机的通道,从英文打字机键 ...

  9. the machine超级计算机,是内存,亦是硬盘:惠普新型计算机The Machine背后的“大杀器”...

    11月27日,惠普在伦敦发布会上正式揭晓了名为"The Machine"的新型计算机原型机,并宣布在制造新型计算机的征途上迈出了里程碑式的一步. 目前计算机的工作方式基本沿用了上世 ...

最新文章

  1. matlab整定串级pid,PID算法在Matlab串级控制中的应用
  2. 【知识星球】有三AI编程与开源框架正式开通
  3. php 获取请求,PHP 扩展 - 获取请求信息
  4. 如何制作可以在 MaxCompute 上使用的 crcmod
  5. MATLAB xlswrite函数出现“错误: 服务器出现意外情况”
  6. Atom打开报错:Cannot load the system dictionary for zh-CN
  7. C# 类中的静态代码块
  8. spss数据预处理步骤_数据预处理详解
  9. Maxwell 介绍、安装、部署、运行(MYSQL -> Maxwell -> kafka)
  10. 互动媒体技术——processing旋转方块(不同角度的旋转)
  11. 啦啦啦一棵R语言圣诞树~
  12. S7-200SMART PLC基础知识汇总
  13. arduino智能浇花系统_基于Arduino的远程自动浇花系统设计
  14. 基于Qt模仿网易云音乐播放器
  15. 【第4期-智能驾驶汽车系列术语概念解析】第5节:龙格现象
  16. HBase Shell 命令
  17. 酷睿 i7 12800H怎么样 相当于什么水平
  18. Unity脚本打包和Jenkins打包
  19. 洛阳的历史、洛阳地图、洛阳的尴尬
  20. js导出excel增加表头、mso-number-format定义数据格式

热门文章

  1. usaco frame up(所有拓扑排序的输出)
  2. usaco shuttle puzzle(dfs剪枝)
  3. rpm安装的mysql如何数据迁移_【鲲鹏翱翔】数据库04-MySQL5.7.28移植安装指南-RPM包方式...
  4. android 汉字编码,Android解压中文乱码
  5. 服务器开机只显示cdm,电脑开机黑屏出现cdm.exe对话框怎么处理?!我的扣扣
  6. Linux网络编程实例分析
  7. 深度学习多框架多平台推理引擎工具
  8. python 显示gif图像
  9. HDU - 3078 Network 倍增LCA
  10. linux编译安装jpeg,Linux下JPEG库安装脚本(转)