洛谷 P2015 二叉蘋果樹(樹形dp)

2022-02-13 11:45:47 字數 615 閱讀 6096

很顯然的樹形dp,設dp[i][j]表示在子樹i上保留j條邊的最大蘋果樹,從兒子節點轉移過來即可,注意若某個兒子不選,則以此兒子為根的子樹都不能選。

還有就是因為是二叉樹,可以提前遍歷一遍求出每個點的兩個或零個兒子,就不用在求dp時倒序列舉了,算是乙個小技巧趴。

1 #include2 #include3 #include4 #include5 #include6

using

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現在這顆樹枝條太多了,需要剪枝。但是一些樹枝...