n
nn個點每個點有些可以染的顏色,要求相鄰顏色不相同,方案總數。
樹形d pdp
dp,定義fx,
if_
fx,i
表示點x
xx的染顏色i
ii的方案數。然後定義zx=
∑i=1
mfxi
z_x=\sum_^mf_
zx=∑i
=1m
fxi
然後顯然動態轉移方程fx,
i=zy
−fy,
i(x−
>y)
f_=z_y-f_(x->y)
fx,i=
zy−
fy,i
(x−
>y)
#include
#include
#include
using
namespace std;
const
int xjq=
1e9+
7,n=
5001
;int tot,n,m,f[n]
[n],z[n]
,ls[n]
;struct nodea[
2*n]
;void
addl
(int x,
int y)
voiddp(
int x,
int fa)
for(
int j=
1;j<=m;j++
)(z[x]
+=f[x]
[j])
%=xjq;
}int
main()
for(
int i=
1;i(1,0
);printf
("%d"
,z[1])
;}
(noip 模擬 染色)《樹形DP
染色 題目描述 有一棵點數為 n 的樹,樹邊有邊權。將 m 個點染成黑色,並將其他的點染 成白色。會獲得黑點兩兩之間的距離和加上白點兩兩之間的距離和的收益。問 收益最大值是多少。輸入格式 第一行兩個整數 n m。接下來 n 1 行,每行三個整數 a b c,表示有一 條樹邊連線 a b,長度為 c。...
玩具 奇妙樹形dp 計數
求 nn 個結點的隨機生成森林的 期望最高樹高 設 f i,j,k f i,j,k 表示高度為 i i,使用 j j 個球,k k 個球在頂部的概率,f i,j,k f i,j 1,k j 3j 1 f i j 1 k 1 1j 1 f i 1 j 1 p 1j 1 f i,j,k f i j 1 ...
HAOI2015 樹上染色(樹形dp)
有一棵點數為 n 的樹,樹邊有邊權。給你乙個在 0 n 之內的正整數 k 你要在這棵樹中選擇 k個點,將其染成黑色,並將其他 的n k個點染成白色 將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間的距離的和的受益。問受益最大值是多少。輸入格式 第一行包含兩個整數 n,k 接下來 n 1 行...