比較經典的一類樹上揹包問題套乙個子集狀壓列舉。
注意到代價的計算與所選的點的集合有關,如果我們要統計代價需要狀壓記錄點集,而資料範圍非常配合的給了p≤12
p\le12
p≤12
,直接狀壓當前子樹包含的點集。
從葉子向根dp,對於t
tt個限制,預處理出每乙個點集s
ss所產生的收益,並把路徑拆成乙個乙個點,在向根轉移的時候分開算貢獻,及將子樹的貢獻算出,只考慮當前這個點對應的點集所產生的貢獻。
f[u][s]=max(f[v][s']+f[u][(s-s')])\\ f[u][s]+=val[s]\\ \end
inline
intred()
cs int n=
110,lim=
1<<12;
inline
intlb
(int x)
int f[n]
[lim]
,val[lim]
,n,m,up;
vector<
int> g[n]
;#define it vector::iterator
inline
void
ckmax
(int
&a,int b)
void
dfs(
int u,
int fa)}}
for(ri i=
0;i<=up;
++i)f[u]
[i]+
=val[i];}
signed
main()
for(ri i=
1;i<=n;
++i)
for(ri j=
1;j<=up;
++j)
}int t=in;
while
(t--
)for
(ri i=
1;i<=up;
++i)}}
dfs(1,
0); cout<[up]
;return0;
}
學術篇 SDOI2008 山賊集團
今天一月一號.突然想安利一波我的中二的2017總結.傳送門1 codevs 傳送門2 luogu 時限5s和1s的區別 你沒看我傳送門都給的大牛分站了 現在不僅線篩.有負數的快讀都打不對了.來比較一下他們的區別?inline int gn int a 0,char c 0,int f 1 inlin...
SDOI2008 燒水問題
把總質量為1kg的水分裝在n個杯子裡,每杯水的質量均為 1 n kg,初始溫度均為0 現需要把每一杯水都燒開。我們可以對任意一杯水進行加熱。把一杯水的溫度公升高t 所需的能量為 4200 t n j,其中,j 是能量單位 焦耳 如果一旦某杯水的溫度達到100 那麼這杯水的溫度就不能再繼續公升高,此時...
SDOI2008 洞穴勘測
lct維護連通性型別的題目,主要是要搞清楚findroot函式的作用 判斷根是否相同,和並查集裡面的find 函式有異曲同工之妙,如果根相同可以認為兩個點具有連通性。先access打通一道到x的實邊,現在x是深度最大的節點。然後再splay x到根節點,因為它深度最大,這個時候它只有左子樹。所以找它...