JZOJ – 5455 拆网线
Time Limit : 1000ms
Memory Limit : 64MB
Description
企鹅国的网吧们之间由网线互相连接,形成一棵树的结构。现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料。但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把这K只企鹅安排到不同的机房(两只企鹅在同一个机房会吵架),然后拆掉一些网线,但是需要保证每只企鹅至少还能通过留下来的网线和至少另一只企鹅联机游戏。
所以他们想知道,最少需要保留多少根网线?
Input
第一行一个整数
每组数据第一行两个整数
第二行
Output
每组数据输出一个整数表示最少保留的网线数目。
Sample Input
Sample Output
Data Constraint
对于30%的数据:N≤15;
对于50%的数据:N≤300;
对于70%的数据:N≤2000;
对于100%的数据:2≤K≤N≤100000,T≤10。
解题思路
我们发现这是一棵树,题目要求一只企鹅只需要有另一只企鹅联机即可。
那么我们就尽可能期望有更多的边将两只不同的企鹅两两连接在一起。一根网线连接两只企鹅,
题目转变为计算在一棵树中最多有多少条这样的边,考虑树形DP
对于状态
状态
最后我们就可以计算出有
如果企鹅的数量小于等于
如果大于那么一根网线只能连接一只不同的企鹅,另一端接在已经连接的企鹅上。那么网线数量加上剩余的企鹅数量即可。