APIO2012 派遣 題解

2021-08-21 07:26:27 字數 840 閱讀 8013

這題還是非常顯然的

題意大概是隨便選乙個點x,樹上每點有點權(v[x])和乙個代價(c[x]),你有乙個值m,設,我們用m可以最多大於y[x]個x的子樹中代價的和,求出所有點的y[x]*v[x]的值,其中最大值就是答案。

非常顯然用線段樹合併

還有可並堆的做法,不怎麼會會,下次學

#include#include#include#include#include#includeusing namespace std;

int lch[5000010],rch[5000010];

long long sum[5000010];

int cnt[5000010];

int idx;

int root[200010];

int merge(int u,int v)

void ins(int &rt,int l,int r,int x,int val)

sum[rt]+=val,cnt[rt]++;

if(l==r)

int mid=(l+r)/2;

if(x<=mid)else

}int bisearch(int rt,int l,int r,int limit)

if(l==r)else

} int mid=(l+r)/2;

if(limit>sum[lch[rt]])else

}struct node;

}stable_sort(t+1,t+n+1);

for(i=1;i<=n;++i)

for(i=n;i;--i)

}cout

}

APIO2012 派遣 解題報告

問題描述 在乙個忍者的幫派裡,一些忍者們被選中派遣給顧客,然後依據自己的工作獲取報償。在這個幫派裡,有一名忍者被稱之為master。除了master以外,每名忍者都有且僅有乙個上級。為保密,同時增強忍者們的領導力,所有與他們工作相關的指令總是由上級傳送給他的直接下屬,而不允許通過其他的方式傳送。現在...

APIO2012 派遣 左偏樹

題面 考慮列舉每個節點作為管理者,計算所獲得的滿意程度以更新答案。對於每個節點的計算,貪心,維護乙個大根堆,每次彈出薪水最大的人。這裡注意,一旦乙個人被彈出,那麼不再可能出現在其祖先們的最優解裡 廢話 所以使用可並堆左偏樹優化複雜度。include include define maxn 10001...

左偏樹 APIO2012 派遣

題意可真的是有毒 第一眼樹形揹包可做?反正我沒用樹形揹包打過,邊上巨佬打的揹包似乎沒拿分 後來發現可以貪心搞,我們先把乙個節點所有的兒子都取進去,之後不行的話再從大的開始拿走就好了 問題就變成了了如何快速維護各個節點子樹中的最大值,優先佇列就好了!關鍵是還要資瓷合併,pb ds庫就好了,手打左偏樹就...