有一棵二叉蘋果樹,如果樹枝有分叉,一定是分兩叉,即沒有只有乙個兒子的節點。
這棵樹共 n 個節點,編號為 1 至 n,樹根編號一定為 1。
我們用一根樹枝兩端連線的節點編號描述一根樹枝的位置。
一棵蘋果樹的樹枝太多了,需要剪枝。但是一些樹枝上長有蘋果,給定需要保留的樹枝數量,求最多能留住多少蘋果。
這裡的保留是指最終與1號點連通。
輸入格式
第一行包含兩個整數 n 和 q,分別表示樹的節點數以及要保留的樹枝數量。
接下來 n−1 行描述樹枝資訊,每行三個整數,前兩個是它連線的節點的編號,第三個數是這根樹枝上蘋果數量。
輸出格式
輸出僅一行,表示最多能留住的蘋果的數量。
資料範圍
1≤q輸入樣例:
5 21 3 1
1 4 10
2 3 20
3 5 20
輸出樣例:
21有點像有依賴的揹包,這裡用樹形dp來做,我們用f[i][j]表示以i為根保留m條邊的權值和。
所以我們遍歷每乙個節點,在樹上跑一遍揹包就可以了。
#include
using
namespace std;
const
int n=
105,m=n*2;
int f[n]
[n],m,n,ne[m]
,h[m]
,e[m]
,w[m]
,cnt,ans;
void
add(
int a,
int b,
int c)
void
dfs(
int u,
int fa)}}
}int
main()
dfs(1,
-1);
cout<[m]<}
二叉蘋果樹 樹形DP
題意 description 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 1 現在這顆樹枝條太多了...
二叉蘋果樹(樹形DP)
原題 顯然我們考慮這道題目可以很蠢的寫乙個dp對吧。考慮 dp i,j 表示以i為根,保留j個節點的最大蘋果數。然後就可以樹形dp的寫了。include include include include include include include define ll long long defin...
二叉蘋果樹 樹形dp
p2015 二叉蘋果樹 洛谷 電腦科學教育新生態 luogu.com.cn 嗚嗚嗚嗚,真的是一道厲害題 至少對目前的我來說 研究了乙個小時。首先,因為我們不知道一對座標中,誰是父親,誰是兒子,所以用無向圖把二者連起來,但最後dfs的時候還是只用其中乙個。狀態表示 i的子樹上保留j條邊時蘋果的最大值 ...