日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

發(fā)布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [bzoj2259][Oibh]新型计算机_Dijkstra 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

新型計算機 bzoj-2259 Oibh

題目大意:給定一個n個數(shù)的數(shù)列,第i個數(shù)為a[i],更改第i個數(shù)至x的代價為|x-a[i]|。求最小代價,使得:讀入一個數(shù)s1后,向后連著讀s1個數(shù),然后如s2,再向后讀s2個數(shù)。保證最后恰好讀到第n個數(shù)。

注釋:$1\le n\le 10^6$


想法:又開始了... ...在那里一頓dp...

結(jié)果又是一個圖論題.. ..這場面好熟悉

我們直接從第i個數(shù)像第i+a[i]連一條邊權(quán)為0的邊。然后這時我們思考暴力怎么做?暴力的話從i+a[i]開始像左右依次連邊權(quán)為1,2,3...的邊,然后Dijkstra即可,時空復(fù)雜度均為$O(n^2)$。如何優(yōu)化這一過程?我們思考:其實這中的有些邊是沒有用的,我們只需要將相鄰兩個點之間連一條邊權(quán)為1的邊即可。然后堆優(yōu)化Dij,時間復(fù)雜度為O(nlogn)。

正確性:我們發(fā)現(xiàn):絕對值函數(shù)f(x)=|x|是一個偶函數(shù),而且是一個線性偶函數(shù),所以這東西支持在符號相同的情況下加減,在符號不同的情況下可以直接通過我們連的邊退回去,證畢。

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

#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;
}

小結(jié):圖論真tm難... ...

轉(zhuǎn)載于:https://www.cnblogs.com/ShuraK/p/9374987.html

總結(jié)

以上是生活随笔為你收集整理的[bzoj2259][Oibh]新型计算机_Dijkstra的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。