#P3874. [TJOI2010] 砍树

[TJOI2010] 砍树

背景

小 A 在果园里发现了一棵结满果子的树,于是他就打起了坏主意,他打算把树的一部分砍下来带回家。

题目描述

我们可以把这棵树表示成一个树型的结构,也就是说,任意两个点之间有且仅有一条路径。在每个点 ii 处都结着一个水果,每个水果有一个价值 viv_i 和重量 wiw_i。小 A 想带走树的一部分(或全部),包含至少 KK 个结点(也就是至少 KK 个水果),且这些水果的平均价值尽可能高。平均价值是指水果总的价值除以总的重量。注意小 A 砍下的树必须是在原来的树中连通的一部分。

输入格式

第一行包含两个数 NN 和 KK,分别表示树的结点数和小 A 至少应带走的水果数。

第二行包含空格隔开的 NN 个数,分别表示每个结点处水果的价值 viv_i。

第三行包含空格隔开的 NN 个数,分别表示每个水果的重量 wiw_i。

按下来 N−1N-1 行,每行包含两个数 aia_i 和 bib_i(1≤ai,bi≤N1 \le a_i,b_i \le N),表示在结点 aia_i 和 bib_i 之间有一条边。输入保证是一棵正确的树结构。

输出格式

输出一行,包含一个数,表示最大可能的平均价值。四舍五入到小数点后两位。

3 1
20 10 20
1 1 1
1 2
2 3

20.00
3 2
20 10 20
1 1 1
1 2
2 3

16.67

提示

数据规模与约定

  • 对 20%20\% 的数据,1≤N≤161 \le N \le 16;
  • 对 100%100\% 的数据,1≤N≤1001 \le N \le 100,1≤K≤N1 \le K \le N,1≤vi≤100001 \le v_i \le 10000,1≤wi≤100001 \le w_i \le 10000。