时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
树上长了一些快乐水,有一些是百事可乐,另一些是可口可乐。桃也野和唐夭夭打算采摘一些快乐水,为了节约体力,他们希望采摘树上一个连通块中所有快乐水,为了让快乐水可以平均分配,连通块中百事可乐和可口可乐的数量都必须是偶数(可以为0)。每瓶快乐水有一定的重量,只要力量≥快乐水的重量就可以采摘这瓶快乐水(采摘快乐水并不会消耗力量)。他们想要知道最少需要多少力量才可以采摘至少k瓶快乐水,并且满足以上的条件。
输入描述:
第一行两个整数n和k,表示快乐水的数量和至少需要采摘多少瓶快乐水。(1<=k<=n<=1e5)
第二行n个整数,第i个数ai为0表示第i瓶水是百事可乐,为1表示第i瓶水是可口可乐。(0<=ai<=1)
第三行n个整数,第i个数vi表示第i瓶快乐水的重量。(1<=vi<=1e5)
接下来n-1行,每行两个整数,表示树的一条边。
输出描述:
输出共一行,如果可以采摘至少k瓶快乐水,输出至少需要多少点力量,如果不可以采摘至少k瓶快乐水则输出-1。
示例1
输入
复制
5 4
1 0 0 1 1
1 2 3 4 5
1 2
1 3
2 4
3 5
说明
最优解是选择圈中的连通块,连通块中最重的可乐重量为4,所以答案为4。
示例2
输入
复制
6 1
0 1 1 0 0 0
5 10 9 1 10 1
5 1
4 6
5 6
1 3
1 2
示例3
输入
复制
20 14
1 1 0 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 0
1 10 2 4 4 5 4 3 1 9 8 10 3 9 1 5 1 1 9 7
15 6
14 19
1 14
19 8
12 5
6 20
13 11
5 17
4 10
18 2
15 11
17 19
3 14
2 4
9 7
4 14
7 15
12 13
3 16