一棵\(n(n\le2\times10^6)\)個點的樹,每個點有乙個重量\(c_i\)和乙個載重上限\(m\)。刪除乙個結點時,將自身的重量加到父結點上,並將所有子結點連到父結點上。問若要保證對於任意乙個結點,子結點數與重量之和\(\le m\)時,最多刪去幾個結點。
自底向上貪心,子結點按照\(c_i\)排序,能刪除的盡量刪除。
時間複雜度\(\mathcal o(n\log n)\)。
#include#include#include#includeinline int getint()
const int n=2e6+1;
int n,m,c[n],cnt[n],ans;
std::vectore[n];
inline void add_edge(const int &u,const int &v)
inline bool cmp(const int &i,const int &j)
void dfs(const int &x)
std::sort(e[x].begin(),e[x].end(),cmp);
for(unsigned i=0;iint main()
} dfs(0);
printf("%d\n",ans);
return 0;
}
HEOI2015 兔子和櫻花
題目傳送門 有一棵樹,裡面有很多點,每個點上有乙個櫻花量 a i a i a i 然後他的兒子數為 son i son i son i 刪除點以後這個點的櫻花和兒子都會繼承給他的父親,問最多刪除多少點,能滿足刪除的點的父親滿足 a i so n i m a i son i leq m a i s o...
省選專練HEOI2015兔子和櫻花
毒瘤貪心。第一他長得太像貪心了。而且下標位置是0 n 1 我最先tmmmp看樣例以為是乙個仙人掌。貪心,每次選最優的,也就是代價最小的。注意刪去乙個兒子,c i 要相對 1 include include include include includeusing namespace std cons...
P4107 HEOI2015 兔子與櫻花 貪心
傳送門 一道貪心題 首先我們可以證明最優的貢獻一定是從下依次合併到上的 不會出現乙個節點不能合併到父親節點,卻能合併到父親節點的祖先節點的情況 我們設當前的節點為 u u 的父親節點為 v v 的父親節點是 fa 如果 u 不能合併到 v 上,那麼必定有 c u son u 1 c v son v ...