優先佇列高階2018 09 06

2021-08-27 08:51:41 字數 2225 閱讀 7771

優先佇列是什麼呢?

答(參考度娘):在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 (first in, largest out)的行為特徵。通常採用堆資料結構來實現。

更高階的一些操作請參考: (無敵強者的blog)

現在,我們做點高難度的題吧!!!

兩題:這裡就需要用到一些堆優化了,既然說會卡spfa,所以,就可以用prim來做:

#include

using

namespace std;

const

int maxn=

100000+5

,inf=

1000000000+5

,maxm=

1000000+5

;int to[maxm]

,beg[maxn]

,nex[maxm]

,d[maxn]

,p[maxn]

,w[maxm]

,n,m,s,e;

priority_queueint,

int>>q;

void

add(

int x,

int y,

int z)

intmain()

for(

int i=

1;i<=n;i++

) d[i]

=inf;

d[s]=0

; q.

push

(make_pair(0

,s))

;while

(q.size()

)}}for

(int i=

1;i<=n;i++)if

(d[i]

==inf)

cout<<

2147483647

<<

" ";

else

cout<<<

" ";

return0;

}

還有一道題:

這裡就直接附上**了:

#include

#define inf 0x3f3f3f3f

using

namespace std;

int i,j,k,n,m,s,len;

int vis[

15010];

int vis_[

15010];

int dis[

15010];

int head[

200010];

struct stuc[

200010];

void

add(

int u,

int y,

int o)

priority_queue int,

int>

> dl;

intmain()

for(

int i=

1;i<=n;i++

) vis[i]

=inf;

vis[s]=0

;while

(!dl.

empty()

) dl.

pop();

dl.push

(make_pair(0

,s))

;while

(!dl.

empty()

)}} s=n;

for(

int i=

1;i<=n;i++

) vis_[i]

=inf;

memset

(dis,0,

sizeof

(dis));

while

(!dl.

empty()

) dl.

pop();

vis_[s]=0

; dl.

push

(make_pair(0

,s))

;while

(!dl.

empty()

)}}int s1=vis[n]

,s2=

1e9;

for(

int i=

1;i<=len;i++

) cout

}

優先佇列(3道優先佇列問題)

優先佇列是一種十分強大的資料結構,它保持了一種動態的有序性,對於不斷改變有入隊的操作,而又需要某種最大或最小的操作的問題是再合適不過了,通常優先佇列的實現是由最小堆或者最大堆完成的,並通過堆排序保持佇列的有序性,模擬佇列的結構,在實際比賽中要寫乙個堆排序還是要一定的時間的,但是stl中queue容器...

佇列以及優先佇列

1.佇列 佇列的定義 標頭檔案 include 佇列是一種先進先出的資料結構 佇列的宣告 queueq 宣告字元型別 queueq 宣告結構體型別 以及可以宣告一些自定義的型別 佇列的操作 入佇列 s.push x 出佇列 s.pop 返回佇列的資料數量 s.size 判斷佇列是否為空 s.empt...

堆疊,佇列,優先佇列

包含標頭檔案 include定義 stacks 特點 先進後出。即 像瓶子一樣。先進來的資料在底部。例 輸入 1 2 3 4 5 輸出 5 4 3 2 1 棧的基本操作 s.push a 把元素a入棧。s.pop 刪除棧頂元素。s.top 返回棧頂元素,但不會刪除。s.size 返回棧中元素個數。s...