藍魔法師 牛客

2022-03-31 21:17:52 字數 730 閱讀 7440

將一顆\(n(1 \leq n \leq 2000)\)個結點的樹,分成\(t(1\leq t \leq n)\)個連通塊,且每個連通塊的大小都小於或者等於\(k(1 \leq k \leq 2000)\),求劃分方案數?

\(dp[i][j]\):以\(i\)為根的子樹向父親結點\(u\)提供\(j\)個點的貢獻

\[dp[fa[i]][cnt_1 + cnt_2]=\sum

\]複雜度\(o(nk)\)

const int n = 2005;

const int mod = 998244353;

int n, k;

int dp[n][n], sz[n], temp[n];

vectorg[n];

void addedge(int u, int v)

#define debug(x) cout << "____" << x << "____" << endl

void dfs(int u, int p)

rep (i, 1, k) dp[u][0] = (dp[u][0] + dp[u][i]) % mod;

}int main()

dfs(1, 0);

int ans = 0;

rep (i, 1, k) ans = (ans + dp[1][i]) % mod;

pr(ans);

return 0;

}

藍魔法師 樹形DP

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 你,你認錯人了。我真的,真的不是食人魔。藍魔法師 給出一棵樹,求有多少種刪邊方案,使得刪後的圖每個連通塊大小小於等於k,兩種方案不同當且僅當存在一條邊在乙個方案中被...

牛客網 Wannafly挑戰賽27 藍魔法師

你,你認錯人了。我真的,真的不是食人魔。藍魔法師 給出一棵樹,求有多少種刪邊方案,使得刪後的圖每個連通塊大小小於等於 k 兩種方案不同當且僅當存在一條邊在乙個方案中被刪除,而在另乙個方案中未被刪除,答案對 998244353 取模 第一行兩個整數 n k 表示點數和限制 2 le n le 2000...

白魔法師 牛客小白月賽25

對於這個題目,我的做法是換根dp,因為可以選擇將某乙個點染成白色 不論之前的點是黑是白 做法如下 將每個點當成根節點,然後將根節點染成白色,完全符合題意 首先dfs一下,自底向上,求出每乙個點在子樹內的白色連通塊大小。然後從上到下開始算對孩子節點的貢獻 如果當前點是黑色,那麼對兒子節點肯定沒有貢獻 ...