洛谷P1272 道路重建

2022-05-20 13:34:14 字數 778 閱讀 8835

題目大意:給定乙個 n 個節點的樹,求至少剪掉多少條邊才能使得從樹中分離出乙個大小為 m 的子樹。

題解:考慮樹形 dp,定義 \(dp[u][i][t]\) 為以 u 為根節點與前 i 個子節點構成的子樹中,保留 t 個節點(包括根節點)的最小代價,則狀態轉移方程為 \(dp[u][i][t]=min(dp[u][i][t],dp[u][i-1][t-k]+dp[v][son(v)][k]-2)\),在這裡之所以減掉 2,是因為在前 i-1 個子節點與 u 構成的子樹中,必然不包括第 i 個子節點,因此代價預設算了 1;同理,對於 dp[v] 來說,預設剪掉了 (u,v)。因此,計算答案貢獻時,需要將這個值補上。最後,dp[u][1]初始化為 u 的度。

update on 2019.5.25

加入了上下界優化,時間複雜度為 \(o(n^2)\)。

**如下

#include #define pb push_back

using namespace std;

const int maxn=160;

vectorg[maxn];

int n,p,ans,dp[maxn][maxn],sz[maxn],indeg[maxn];

void dfs(int u,int fa)

ans=min(ans,dp[u][p]);

}void read_and_parse()

memset(dp,0x3f,sizeof(dp));

}void solve()

int main()

重建道路 洛谷p1272

一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p 1 p n...

洛谷 P1272 重建道路

題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...

洛谷 P1272 重建道路

題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...