【文件属性】:
文件名称:“裁枝剪叶”问题,一道 编程竞赛题
文件大小:92KB
文件格式:RAR
更新时间:2012-05-06 13:22:21
“裁枝剪叶”问题
文件名:cut.*
输入文件:cut.in(文本文件,选手按规定格式自行创建)
输出文件:cut.out(文本文件)
问题描述:
一个无向连通图中有N个节点,N-1条边,则该图称为“无根树”。无根树中任何两个节点之间有且只有一条包含最少边的路径。
所谓“裁枝剪叶”,就是去掉无根树中的一条边,这样一棵无根树就被分成了两棵无根树,丢掉其中的一棵,还剩一棵;对剩下的一棵再进行“裁枝剪叶”。经过一系列这样的“裁枝剪叶”后,最后剩下一棵无根树。
若开始时给每个节点加一个值。本题的任务就是:通过一系列“裁枝剪叶(也可以什么裁剪都不进行),使剩下的无根树上的节点的值的和最大(注:节点的值可为负值)。
输入格式:
从文本文件cut.in中读入数据。
第一行一个整数N,表示具有的节点数。
第二行N个整数,第I个整数表示第I个点上的值。
接下来N-1行每行两个整数a,b,表示存在一条边连接着a号节点和b号节点。
输出格式:
输出到文本文件cut.out中。
一个数,表示当1<= N <=16000时,经过一系列“裁枝剪叶”之后所能得到无根树上的节点值之和的最大值。
输入样例:
7
-1 -1 -1 1 1 1 0
1 4
2 5
3 6
4 7
5 7
6 7
输出样例:
3
【文件预览】:
zy2_5_cut_branch
----zy2_5_cut_branch.ncb(57KB)
----cut.out(0B)
----zy2_5_cut_branch.dsw(540B)
----zy2_5_cut_branch.plg(4KB)
----cut3.in(49B)
----cut3.out(0B)
----cut2.out(0B)
----zy2_5_cut_branch.opt(48KB)
----cyio.h(3KB)
----Debug()
--------zy2_5_cut_branch.bsc(393KB)
--------cut_branch.sbr(0B)
----cut.in(76B)
----zy2_5_cut_branch.dsp(4KB)
----cut_branch.cpp(4KB)
----cut2.in(57B)