題解:
先自底向上列舉管理者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 ...