樹形dp B 預算縮減

2022-06-12 22:24:08 字數 850 閱讀 7313

給定一棵樹,你需要刪去一些邊(可以不刪),使得剩下的圖中每個點所在的連通塊大小都\(\geq k\)。

求刪邊的方案數,對\(786433\)取模。兩種方案不同,當且僅當存在一條邊在乙個方案中被刪去,而在另外乙個方案中沒有被刪去。

設\(dp[x][k]\)表示以點\(x\)為根的子樹中\(x\)所在的連通塊大小為\(k\)的方案數

狀態轉移方程顯然,每次都要計算斷了一條邊的貢獻,當且僅當子節點所在的連通塊大小不小於\(k\)

但是這樣\(o(n^3)\)會t掉,考慮當中有很多冗餘狀態,那麼記錄子樹大小,按照子樹大小拼接,時間複雜度\(o(n^2)\)

#include #include #define rr register

using namespace std;

const int n = 5011, mod = 786433;

struct node e[n << 1];

int dp[n][n], son[n], f[n], ans, as[n], n, k = 1, m;

inline signed iut()

inline signed mo(int x, int y)

inline void dfs(int x, int fa)

}signed main() , as[x] = k;

e[++k] = (node), as[y] = k;

}dfs(1, 0);

for (rr int i = m; i <= son[1]; ++i) ans = mo(ans, dp[1][i]);

return !printf("%d", ans);

}

預增量和預減量

這個程式列印什麼值?答案是 它是不確定的。如果 被施加到x之前的賦值,答案將是1。如果 被施加到x後的賦值,答案將是2。還有其他的情況下,c 並不指定某些東西的計算順序不同,所以編譯器會做出不同的假設。甚至當c 不清楚事情應該怎樣評價,一些編譯器實現涉及的變數具有 的不當行為。這些問題通常都可以避免...

線性 dp B018 LC 恢復空格(分類討論)

哦,不!你不小心把乙個長篇文章中的空格 標點都刪掉了,並且大寫也弄成了小寫。像句子 i reset the computer.it still didn t boot 已經變成了 iresetthecomputeritstilldidntboot 在處理標點符號和大小寫之前,你得先把它斷成詞語。當然...

mysql 預載入快取 預載入與快取

最近的專案中為了能夠提公升那麼一丟丟效能,嘗試了一下對 chunks 進行預載入處理。雖然做了非同步載入的處理,但是專案大小決定了還是有多個非同步的 chunk.js 需要進行預載入,這裡我指的是 preload與a webpack plugin for injecting into htmlweb...