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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

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

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

新型計(jì)算機(jī) bzoj-2259 Oibh

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

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


想法:又開(kāi)始了... ...在那里一頓dp...

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

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

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

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

#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的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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