Pro.ID2045 Titled森林问题 Title链接http://10.20.2.8/oj/exercise/problem?problem_id=2045 AC0 Submit0 Ratio- 时间&空间限制描述设T 是一棵带权树,树的每一条边带一个正权。又设S是T的顶点集,T/S 是从树T中将S中顶点删去后得到的森林。如果T/S中所有树的从根到叶的路长都不超过d ,则称T/S是一个d森林。 (1) 设计一个算法求T的最小顶点集S,使T/S是d森林。(提示:从叶向根移动。) (2) 分析算法的正确性和计算复杂性。 (3) 设T中有n个顶点,则算法的计算时间复杂性应为O(n)。 对于给定的带权树,计算最小分离集S。 输入输入第一行有一个正整数n,表示给定的带权树有n个顶点,编号为1,2,…,n。编号为1的顶点是树根。 接下来的n行中,第i+1行描述与i个顶点相关联的边的信息。每行的第一个正整数k表示与该顶点相关联的边数。其后2k个数中,每两个数表示一条边。第一个数是与该顶点相关联的另一个顶点的编号,第二个数是边权值。当k=0 时表示相应的结点是叶结点。文件的最后一行是正整数d,表示森林中所有树的从根到叶的路长都不超过d 。 输出Description 设T 是一棵带权树,树的每一条边带一个正权。又设S是T的顶点集,T/S 是从树T中将S中顶点删去后得到的森林。如果T/S中所有树的从根到叶的路长都不超过d ,则称T/S是一个d森林。 (1) 设计一个算法求T的最小顶点集S,使T/S是d森林。(提示:从叶向根移动。) (2) 分析算法的正确性和计算复杂性。 (3) 设T中有n个顶点,则算法的计算时间复杂性应为O(n)。 对于给定的带权树,计算最小分离集S。 Input 输入第一行有一个正整数n,表示给定的带权树有n个顶点,编号为1,2,…,n。编号为1的顶点是树根。 接下来的n行中,第i+1行描述与i个顶点相关联的边的信息。每行的第一个正整数k表示与该顶点相关联的边数。其后2k个数中,每两个数表示一条边。第一个数是与该顶点相关联的另一个顶点的编号,第二个数是边权值。当k=0 时表示相应的结点是叶结点。文件的最后一行是正整数d,表示森林中所有树的从根到叶的路长都不超过d 。 Output 输出最小分离集S的顶点数。如果无法得到所要求的d森林则输出 "No Solution" Sample Input 4 Sample Output 1 Author 样例输入4 样例输出1 提示作者 |