題目傳送門
有一棵樹,裡面有很多點,每個點上有乙個櫻花量 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
on[i
]≤m,輸出最多刪除的點數
我們很容易就會想到從下向上來解決本到題,然後我們就貪心的想,我們想刪的點一定是對上面父親的值增加最小的,那麼我們就用乙個新的陣列 key
[i
]key[i]
key[i]
來存 a[i
]+so
n[i]
a[i]+son[i]
a[i]+s
on[i
] ,然後我們對於乙個點來說我們就按照這個從小到大排序一遍,然後看是否能刪,能刪就刪,然後統計答案就可以了/
#include
#include
#include
#include
using
namespace std;
int key[
4000010
],a[
4000010
],sonsum[
4000010];
int l[
4000010
],r[
4000010
],son[
4000010];
int ans=0;
int n,m;
bool
comp
(int x,
int y)
void
dfs(
int now)
return;}
intmain()
dfs(0)
; cout<'\n'
;}
HEOI2015 兔子與櫻花
一棵 n n le2 times10 6 個點的樹,每個點有乙個重量 c i 和乙個載重上限 m 刪除乙個結點時,將自身的重量加到父結點上,並將所有子結點連到父結點上。問若要保證對於任意乙個結點,子結點數與重量之和 le m 時,最多刪去幾個結點。自底向上貪心,子結點按照 c i 排序,能刪除的盡量...
省選專練HEOI2015兔子和櫻花
毒瘤貪心。第一他長得太像貪心了。而且下標位置是0 n 1 我最先tmmmp看樣例以為是乙個仙人掌。貪心,每次選最優的,也就是代價最小的。注意刪去乙個兒子,c i 要相對 1 include include include include includeusing namespace std cons...
HEOI2015 定價 (貪心)
先說一下我對這個題目的態度 首先這一題是貪心,這個十分明顯,看了一眼其他題解都是十分優秀的貪心,可是大家都沒有想過嗎 你們貪心都是在區間 l,r 上列舉的貪心,雖然每一次可以直接加上 10 的階乘,但你們畢竟是用的 int long long 啊!這一題得正解複雜度是 log n 的,不得不說題目的...