BZOJ 2809(優先佇列 啟發式合併)

2021-08-05 20:47:11 字數 661 閱讀 8413

題解:

先自底向上列舉管理者x,那麼根據題意,我們就要從x的子樹中選擇盡量多的忍者,且工資總和不超過m

用乙個優先佇列

到乙個點x,就把它的兒子節點的優先佇列啟發式合併

顯然優先選工資低的,那麼維護大根堆,不停地刪堆頂,直到工資滿足預算即可

#include 

#include

#include

#include

#include

using

namespace

std;

#define n 100010

typedef

long

long ll;

priority_queue que[n];

ll lead[n],c[n],m,ans;

vector

g[n];

int root[n],n;

int merge(int x,int y)

while(!que[x].empty()&&c[x]>m)

return x;

}void dfs(int x)

dfs(1);

printf("%lld\n",ans);

return

0;}

bzoj 1438 啟發式合併

time limit 10 sec memory limit 64 mb submit 2341 solved 965 submit status discuss n個布丁擺成一行,進行m次操作.每次將某個顏色的布丁全部變成另一種顏色的,然後再詢問當前一共有多少段顏色.例如顏色分別為1,2,2,1的...

A 演算法 啟發式的廣度優先搜尋

一.a 演算法 a 演算法與普通的bfs不同的點在於,bfs始終是以當前節點到初始節點的距離為基準,每次都選取較小值進行擴充套件。而a 演算法則是通過乙個估價函式f x g x h x 每次都已這個值為基準,選取較小的值進行擴充套件。二.估價函式 f x g x h x f x 是我們最後估計出來的...

bzoj 3123(主席樹 啟發式合併)

傳送門 題解 對點到根維護權值線段樹,每次連邊就進行啟發式合併 用size啟發 詢問就按區間第k大的方式詢問,此處不再贅述。吐槽三點 1.說好的多組資料其實只有一組,醉了。2.1e9的資料按理說是需要離散化的,但是離散化了反而要re 可能是個人原因 3.這個 片的int為啥是畸形的。include ...