很顯然的樹形dp,設dp[i][j]表示在子樹i上保留j條邊的最大蘋果樹,從兒子節點轉移過來即可,注意若某個兒子不選,則以此兒子為根的子樹都不能選。
還有就是因為是二叉樹,可以提前遍歷一遍求出每個點的兩個或零個兒子,就不用在求dp時倒序列舉了,算是乙個小技巧趴。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;
7int n,q,cnt,p[105],dp[105][105],son[105][3];8
struct
nodee[205
];11
void insert(int u,int v,int
value)
18void dfs(int u,int
fa)25}26
void dfs2(int
u)36}37
intmain()
3847 dfs(1,-1
);48 dfs2(1
);49 cout<1
][q];
50return0;
51 }
洛谷 P2015 二叉蘋果樹 樹形dp
有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 1現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋...
洛谷P2015 二叉蘋果樹(樹形dp)
有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 1現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋...
洛谷P2015 二叉蘋果樹 樹形dp)
題目描述 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 34 1現在這顆樹枝條太多了,需要剪枝。但是一些樹枝...