【樹形dp】poj 1947 Rebuilding Roads
Link:http://poj.org/problem?id=1947
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
/*
Anniversary party POJ - 2342
題意:有n個點組成一棵樹,問至少要刪除多少條邊才能獲得一棵有p個結點的子樹?
題解:dp[i][j] 代表以i為根節點,有j個節點的最小減邊數
dp[i][1] = 與子節點的邊數+1(與父節點邊);
for(int k = 1; k < j; k++) 列舉子節點貢獻的點個數
dp[i][j] = min(dp[i][j],dp[child[i]][k]+dp[i][j-k]-2) 加上這條於子節點相連的邊
(要減2,因為算dp[child][j]這條邊算了一次,dp[root][1]這條邊也算了一次)
最後答案dp[root][j]有點不同,他與父節點相連的一條邊減去的,實際上不需要減(因為他沒父節點)
*/
const int N = 155;
const int INF = 0x3f3f3f3f;
vector<int> tree[N];
int n,p;
bool isroot[N];
int dp[N][N];
void dfs(int root)
{
int len = tree[root].size();
dp[root][1] = len+1;
for(int i = 2; i <= p; i++)
dp[root][i] = INF;
for(int i = 0; i < len; i++)
{
int u = tree[root][i];
dfs(u);
for(int j = p; j > 1; j--) //01揹包的思路
{
for(int k = 1; k < j; k++)
dp[root][j] = min(dp[root][j],dp[u][k]+dp[root][j-k]-2);
}
}
}
int main(){
scanf("%d%d",&n,&p);
int u,v;
for(int i = 1; i < n; i++)
{
scanf("%d%d",&u,&v);
tree[u].push_back(v);
isroot[v] = 1;
}
int root = 1;
while(isroot[root])
root++;
dfs(root);
dp[root][p]--;
int mi = INF;
for(int i = 1; i <= n; i++)\
mi = min(mi,dp[i][p]);
printf("%d\n",mi);
return 0;
}
相關文章
- POJ 1947 Rebuilding Roads(基礎的樹形dp)Rebuild
- POJ 2486 Apple Tree(樹形dp)APP
- POJ 3107 Godfather(樹形dp)Go
- POJ3107Godfather[樹形DP 樹的重心]Go
- [筆記]樹形dp筆記
- 樹形DP二三知識
- CCF之網路延時(樹形dp)
- HDU 5326 Work (基礎樹形dp)
- hdu 4123 樹形DP+RMQMQ
- POJ 1724 ROADS(優先佇列+spfa)佇列
- 【動態規劃】樹形DP完全詳解!動態規劃
- ZROJ#398. 【18提高7】隨機遊走(期望dp 樹形dp)隨機
- poj2486Apple Tree[樹形揹包!!!]APP
- Puzzles CodeForces 696B 樹形DP 期望計算
- hdu4313 貪心並查集 || 樹形dp並查集
- Codevs1378選課[樹形DP|兩種做法(多叉轉二叉|樹形DP+分組揹包)---(▼皿▼#)----^___^]dev
- POJ 3411 Paid Roads(搜尋的小技巧)AI
- POJ1745Divisibility(dp)
- POJ2955 Brackets (區間DP)Racket
- Codeforces 461B. Appleman and Tree[樹形DP 方案數]APP
- 樹形dp - Codeforces Round #322 (Div. 2) F Zublicanes and Mumocrates
- POJ 1925 Spiderman(線性dp)IDE
- POJ 3744 概率dp+矩陣矩陣
- CF 1029E Tree with Small Distances 樹形DP or 貪心
- BZOJ1864[ZJOI2006]三色二叉樹[樹形DP]二叉樹
- POJ1849Two[DP|樹的直徑](擴充套件HDU4003待辦)套件
- POJ1160 Post Office[序列DP]
- 【dp】POJ 1015 Jury CompromisePromise
- POJ 3249-Test for Job(拓撲排序&&DP)排序
- POJ 3017 單調佇列dp佇列
- POJ 3691 DNA repair (AC自動機 + dp)AI
- URAL 1018 Binary Apple Tree(樹形dp入門題)APP
- 二叉搜尋樹 [四邊形不等式優化區間dp]優化
- poj 2481 樹狀陣列陣列
- poj 1180 dp的斜率優化優化
- POJ 1664 放蘋果 (基礎組合dp)蘋果
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- bzoj1060: [ZJOI2007]時態同步(樹形Dp)