bzoj 2259: [Oibh]新型计算机 (最短路)
2017-03-17 15:10
337 查看
题目描述
传送门
题目大意:从前往后先读取第一个数字S1,然后顺序向后读入S1个数字。接着再读一个数字S2,顺序向后读入S2个数字……依此类推。只有所有的数恰好读完的序列才是合法的。给出一个输入序列,可以对于序列中的任意一个数进行修改,使修改后的序列是合法序列。求操作的最小代价。设某个位置但是数是x,把他变成y的代价是abs(x-y)
题解
堆优化dijkstra求最短路。这道题的关键是怎么建图。设某个位置的数是x,如果i+x+1<=n +1,就加入一条i->i+x+1 权值为0的边。
因为最后终点一定是n+1,所以如果i+x+1>n+1 ,就加入一条i->n+1权值为i+x-n的边。
从i+x+1的位置向左右一定,每移动一步的代价都是1,向左移动终点不能小于i。
如果是合法的移动就i->i+1 权值为1,i->i-1权值为1.
注意不是所有的位置都可以这么连边,而且不要重复连边。
代码
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<queue> #define N 3000030 #define pa pair<int,int> using namespace std; int tot,n,point ,v ,c ,dis ,nxt ,pre ,to ; void add(int x,int y,int z) { tot++; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; c[tot]=z; // cout<<x<<" "<<y<<" "<<z<<endl; } void dijkstra() { for (int i=1;i<=n+1;i++) dis[i]=1e9+3; dis[1]=0; priority_queue<pa,vector<pa>,greater<pa> > p; p.push(make_pair(0,1)); while (!p.empty()) { int now=p.top().second; p.pop(); for (int i=point[now];i;i=nxt[i]) if (dis[v[i]]>dis[now]+c[i]) { dis[v[i]]=dis[now]+c[i]; p.push(make_pair(dis[v[i]],v[i])); } } } int main() { freopen("a.in","r",stdin); freopen("my.out","w",stdout); scanf("%d",&n); for (int i=1;i<=n;i++) { int x; scanf("%d",&x); for (int j=i+x+1;j<=n&&!to[j];j++) to[j]=1,add(j,j+1,1); for (int j=i+1;j<=min(i+x+1,n)&&!pre[j];j++) pre[j]=1,add(j,j-1,1); if (i+x+1<=n+1) add(i,i+x+1,0); else add(i,n+1,i+x-n); } dijkstra(); printf("%d\n",dis[n+1]); }
相关文章推荐
- BZOJ_2259_ [Oibh]新型计算机 _最短路
- 【BZOJ2259】[Oibh]新型计算机 最短路
- BZOJ2259 [Oibh]新型计算机
- 【bzoj2259】[Oibh]新型计算机 堆优化Dijkstra
- [bzoj2259][Oibh]新型计算机_Dijkstra
- BZOJ 2259: [Oibh]新型计算机 heap+dijkstra
- 【BZOJ】【P2259】【Oibh】【新型计算机】【题解】【最短路】
- bzoj-2259 新型计算机
- BZOJ 2292: 【POJ Challenge 】永远挑战 最短路 dijkstra+heap
- BZOJ 4289: PA2012 Tax 最短路 建图
- 【bzoj1579/Usaco2009 Feb】Revamping Trails 道路升级——分层图最短路
- bzoj2750 Road 最短路&记忆化搜索
- BZOJ_1576_[Usaco2009 Jan]安全路经Travel&&BZOJ_3694_最短路_树链剖分+线段树
- 【BZOJ 1641】【Usaco2007 Nov】Cow Hurdles 奶牛跨栏(最短路变形)
- [bfs 分层图 字典序 最短路] BZOJ 2644 Pku3967 Ideal Path
- BZOJ 4152: [AMPPZ2014]The Captain( 最短路 )
- 【BZOJ1001】狼抓兔子(平面图最小割转最短路)
- BZOJ 1001 狼抓兔子(最大流-对偶图最短路)
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
- bzoj 3482: [COCI2013]hiperprostor 分层图最短路+凸包