#550. 城市建设
城市建设
题目描述
一个国家有 座城市和 条道路。第 座城市有商业价值 ;第 条道路连接城市 ,有建设代价 。保证 座城市被连成了一棵树。
你可以进行 次城市建设,每次可以选择一座城市(可以之前被建设过)和两条和这座城市相邻的,没有被建设的道路建设。
次城市结束后,如果城市 被至少建设过一次,则会产生 的收益;如果道路 被建设过,则会产生 的代价。求最大收益(可能为负)。
保证有解,即至少存在一种进行 次城市建设的方案。
输入格式
第一行三个整数 。如果 则不需要构造方案,否则需要构造方案。
第二行 个整数 。
接下来 行,其中第 行三个整数 。
输出格式
第一行输出一个整数表示最大收益。
如果 ,则还需要输出 行,第 行三个整数 ,表示选择了城市 和道路 。
样例
样例输入 #1
6 2 1
1 2 3 4 5 6
1 2 1
2 3 5
2 4 3
1 5 2
5 6 4
样例输出 #1
-3
5 6 1
2 4 1
样例输入 #2
8 3 0
4 5 1 2 3 1 3 5
2 1 15
7 1 5
4 8 1
8 5 2
7 8 1
6 7 5
3 7 7
样例输出 #2
-13
如何检验你的输出
下发文件中有 check.cpp
和 testlib.h
。将两个文件放在同一目录下后使用命令:
g++ -o check check.cpp -O2 -std=c++14
即可编译 check.cpp
得到可执行文件 check
。
如果你在 Linux
系统下,使用命令:
./check <input-file> <output-file> <answer-file>
如果你在 Windows
系统下,使用命令:
check <input-file> <output-file> <answer-file>
即可检验你的输出正确性。
其中 <input-file> <output-file> <answer-file>
分别对应输入文件,输出文件和答案文件。
数据范围与约定
对于所有数据,有:
子任务 | 特殊性质 | 分值 | ||
---|---|---|---|---|
无 | ||||
无 | ||||