题目名称 1843. [国家集训队2011]切割
输入输出 nt2011_cut.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 20
题目来源 Gravatarcstdio 于2014-12-05加入
开放分组 全部用户
提交状态
分类标签
动态规划
分享题解
通过:3, 提交:5, 通过率:60%
Gravatar_Horizon 100 0.012 s 1.37 MiB C++
Gravatarcstdio 100 0.012 s 1.96 MiB C++
Gravatarmikumikumi 100 0.014 s 1.96 MiB C++
Gravatarmikumikumi 90 0.012 s 1.96 MiB C++
Gravatar_Horizon 0 0.005 s 22.35 MiB C++
关于 切割 的近10条评论(全部评论)
出题人也是殚精竭虑不想写spj……
Gravatarcstdio
2014-12-05 17:03 1楼

1843. [国家集训队2011]切割

★★   输入文件:nt2011_cut.in   输出文件:nt2011_cut.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

有一棵n个节点的无根树,节点编号为1..n。每个节点有一个非负权值。现在需要把这棵树分成若干个联通块(不能有剩下的点),每个联通块的节点个数在k1和k2之间,每个联通块的得分就是该联通块中所有节点权值的平均值。总得分就是指对这个树切割后所有联通块的得分的和。你需要求出一种分割的方案使得总得分尽量小。

【输入格式】

第一行三个整数n,k1,k2,1 ≤ k1 ≤ k2 ≤ n,2 ≤ n ≤ 50;

第二行n个整数,第i个数表示编号为i的节点的权值,每两个相邻整数之间用一个空格隔开;

接下来n-1行,每行两个整数x y,表示编号为x的节点和编号为y的节点之间有一条边。

【输出格式】

如果存在一个切割方案,那么输出一个实数(四舍五入保留二位小数),表示所有分割方案中最小的总得分。

如果不存在切割方案,那么输出所有节点权值和的两倍。

如果对于某个测试点你的输出和标准输出完全一样,那么将得到该测试点全部的分,否则该测试点不得分(使用double类型存储数据,输出结果的整数部分保证不超过9位(十进制),使用double类型可以保证小数部分至少是6位,因而精度应该不存在问题)。

【样例输入】

3 1 1

1 1 1

1 2

2 3

【样例输出】

3.00

【提示】

对于10%的数据,n ≤ 5;

对于30%的数据,n ≤ 10;

对于100%的数据,n ≤ 50,每个点的权值不超过10^9。

【来源】

国家集训队2011 李其乐