description
k妹的胡椒粉大賣,這辣味讓食客們感到刺激,許多餐館也買這位k妹的賬。有n家餐館,有n-1條道路,這n家餐館能相互到達。k妹從1號餐館開始。每乙個單位時間,k妹可以在所在餐館賣完盡量多的胡椒粉,或者移動到有道路直接相連的隔壁餐館。第i家餐館最多需要a[i]瓶胡椒粉。k妹有m個單位的時間,問她最多能賣多少胡椒粉。
input
第一行有兩個正整數n,m。
第二行描述餐館對胡椒粉的最大需求量,有n個正整數,表示a[i]。
接下來有n-1行描述道路的情況,每行兩個正整數u,v,描述這條道路連線的兩個餐館。
output
乙個整數,表示她最多能賣的胡椒粉瓶數。
sample input
樣例1輸入sample output3 59 2 5
1 21 3
樣例2輸入
4 51 1 1 2
1 22 3
3 4樣例3輸入
5 10
1 3 5 2 4
5 23 1
2 34 2
樣例1輸出data constraint14樣例2輸出
3樣例3輸出
15
對於10%的資料,n≤20。
對於50%的資料,n≤110。
對於100%的資料1 ≤ n, m ≤ 500,1 ≤ a[i]≤ 10^6,
第5到第10個測試點都有多個子測試。
hint
在樣例1的中,辣妹到達城市2後就恰好沒時間賣辣椒粉了。
分析這題比賽時並沒有想做,因為折返的騷操作讓我想不到怎麼搞方程(其實一開始列的方程還是挺像正解的233)
設f[i][j][0/1]表示以i為根的子樹用了j的單位時間有/無到達根的最大收益,方程顯然:
f[u][j][1]+f[v][k][0]→f[u][j+k+1][1]
f[u][j][0]+f[v][k][1]→f[u][j+k+2][1]
f[u][j][0]+f[v][k][0]→f[u][j+k+2][0]
然後這樣是o(n2)可以證明,這裡不做過多敘述
#include #includeview codeusing
namespace
std;
const
int n=501
;struct
edge g[
2*n];
intcnt,list[n];
int f[n][n][2
];int
a[n],d[n];
intn,m;
void add(int u,int
v) void
init()
}void dfs(int u,int
fa)
for (int j=m;j>=0;j--)
for (int k=0;k<=m;k++)
for (int j=m;j>=0;j--)
for (int k=0;k<=m;k++)
}for (int i=m;i>=1;i--)
f[u][i][
0]=max(f[u][i][0],f[u][i-1][0]+a[u]),
f[u][i][
1]=max(f[u][i][1],f[u][i-1][1]+a[u]);
}int
main()
樹形DP 樹形DP四例
是時候練一下dp了!我的題單 portkey f u,if fu,i 表示以u uu為根節點的子樹中保留i ii條樹枝的最大蘋果數 f u,i max f max f fu,i max這些題是菜,但也不能輕視啊!include using namespace std define in read i...
樹形操作1 樹形拖拽選擇
樹形運算元據,做個整理總結。本篇是關於樹節點拖拽選擇,重新生成一棵新樹,並支援刪除節點。demo 是基於 jquery 及 easy ui 庫實現的。截圖 利用 css3 實現。主要運用了 before,after選擇器 畫 了兩個圓,然後利用border進行圓的調整,最後利用animation及t...
mysql 樹形彙總 mysql 遞迴查詢樹形目錄
早些時候看到一篇 一句sql實現mysql的遞迴查詢 但是必須是在 id大於pid 的情況下才能使用。建立 create table treenodes id int 節點id nodename varchar 60 節點名稱 pid int 節點父id 插入測試資料 insert into tre...