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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BZOJ 2809】 [Apio2012]dispatching

發(fā)布時間:2025/4/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ 2809】 [Apio2012]dispatching 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description

在一個忍者的幫派里,一些忍者們被選中派遣給顧客,然后依據(jù)自己的工作獲取報償。在這個幫派里,有一名忍者被稱之為?Master。除了?Master以外,每名忍者都有且僅有一個上級。為保密,同時增強(qiáng)忍者們的領(lǐng)導(dǎo)力,所有與他們工作相關(guān)的指令總是由上級發(fā)送給他的直接下屬,而不允許通過其他的方式發(fā)送。現(xiàn)在你要招募一批忍者,并把它們派遣給顧客。你需要為每個被派遣的忍者 支付一定的薪水,同時使得支付的薪水總額不超過你的預(yù)算。另外,為了發(fā)送指令,你需要選擇一名忍者作為管理者,要求這個管理者可以向所有被派遣的忍者 發(fā)送指令,在發(fā)送指令時,任何忍者(不管是否被派遣)都可以作為消息的傳遞 人。管理者自己可以被派遣,也可以不被派遣。當(dāng)然,如果管理者沒有被排遣,就不需要支付管理者的薪水。你的目標(biāo)是在預(yù)算內(nèi)使顧客的滿意度最大。這里定義顧客的滿意度為派遣的忍者總數(shù)乘以管理者的領(lǐng)導(dǎo)力水平,其中每個忍者的領(lǐng)導(dǎo)力水平也是一定的。寫一個程序,給定每一個忍者?i的上級?Bi,薪水Ci,領(lǐng)導(dǎo)力L i,以及支付給忍者們的薪水總預(yù)算?M,輸出在預(yù)算內(nèi)滿足上述要求時顧客滿意度的最大值。


?

1??≤N?≤ 100,000?忍者的個數(shù); 1??≤M?≤ 1,000,000,000?薪水總預(yù)算;? 0??≤Bi < i??忍者的上級的編號; 1??≤Ci ≤ M?????????????????????忍者的薪水; 1??≤Li ≤ 1,000,000,000?????????????忍者的領(lǐng)導(dǎo)力水平。

?

Input

從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù)。 第一行包含兩個整數(shù)?N和?M,其中?N表示忍者的個數(shù),M表示薪水的總預(yù)算。 接下來?N行描述忍者們的上級、薪水以及領(lǐng)導(dǎo)力。其中的第?i?行包含三個整?Bi , C i , L i分別表示第i個忍者的上級,薪水以及領(lǐng)導(dǎo)力。Master滿足B i = 0,并且每一個忍者的老板的編號一定小于自己的編號?Bi < i。


?

Output

輸出一個數(shù),表示在預(yù)算內(nèi)顧客的滿意度的最大值。

Sample Input


5 4
0 3 3
1 3 5
2 2 2
1 2 4
2 3 1

Sample Output

6

HINT

?



如果我們選擇編號為 1的忍者作為管理者并且派遣第三個和第四個忍者,薪水總和為 4,沒有超過總預(yù)算???????????????????????? 4。因?yàn)榕汕擦????????????????????????????? 2?? 個忍者并且管理者的領(lǐng)導(dǎo)力為????? 3,

用戶的滿意度為 2????? ,是可以得到的用戶滿意度的最大值。

枚舉每個人O(n),每個人查詢最多能選幾個人,取最大值O(logn),這里拿數(shù)據(jù)結(jié)構(gòu)搞搞。 關(guān)于這里的數(shù)據(jù)結(jié)構(gòu)。。。我本來想寫splay,后來發(fā)現(xiàn)我不會寫合并,所以寫的堆,話說splay會補(bǔ)上的 1 #include<cstdio> 2 #include<algorithm> 3 #define ll long long 4 using namespace std; 5 const int N=100010; 6 struct ee{int to,next;}e[100010]; 7 int l[N],c[N],sz[N],n,m,head[N],cnt,a[N][2],rt[N]; 8 ll sum[N],ans; 9 void ins(int u,int v){ 10 e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt; 11 } 12 int merge(int x,int y){ 13 if(!x||!y) return x+y; 14 if(c[x]<c[y]) swap(x,y); 15 a[x][1]=merge(a[x][1],y);swap(a[x][1],a[x][0]); 16 return x; 17 } 18 19 void dfs(int x){ 20 sz[x]=1;sum[x]=c[x];rt[x]=x; 21 for(int i=head[x];i;i=e[i].next){ 22 int v=e[i].to; 23 dfs(v);sz[x]+=sz[v];sum[x]+=sum[v]; 24 rt[x]=merge(rt[x],rt[v]); 25 } 26 while(sum[x]>m){ 27 sum[x]-=c[rt[x]];sz[x]--; 28 rt[x]=merge(a[rt[x]][0],a[rt[x]][1]); 29 } 30 ans=max(ans,(ll)l[x]*sz[x]); 31 } 32 33 int main(){ 34 scanf("%d%d",&n,&m); 35 int x; 36 for(int i=1;i<=n;i++){ 37 scanf("%d%d%d",&x,&c[i],&l[i]); 38 if(x!=0) ins(x,i); 39 } 40 dfs(1); 41 printf("%lld",ans); 42 }

?

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

總結(jié)

以上是生活随笔為你收集整理的【BZOJ 2809】 [Apio2012]dispatching的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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