qb#P10018. 松果小镇的一天:临时封路与最远散步
松果小镇的一天:临时封路与最远散步
背景
松果小镇有 处景点,景点之间由 条林间小路相连;任意两处景点之间都能通过小路互达。 每条小路都写着一个“步行时间”——理解成这条路从头走到尾需要的分钟数(均为正整数)。
节庆日里,为了保护松鼠与苔藓,护林员会临时关闭若干条小路。当天被关闭的小路不能通行,于是小镇被分成若干片“可游玩区域”。旅行社想做一项有趣的统计:在每个可游玩区域里,挑两处景点,让你沿“允许通行的小路”走到另一处,最短路要是全区域里“能走到最远的那一对”;这对景点之间的最短路长度,称为这个区域的最长散步距离(即该区域的直径)。 旅行社希望知道:当天所有可游玩区域的“最长散步距离”之和。
直观理解
- 一个“区域”的最长散步距离 = 在该区域内任选两点,它们之间按小路计算的最短路长度的最大值(树的直径)。
- 一天中关闭的几条小路互不影响今后;每次询问都基于原始小镇重新关闭。
任务
给出小镇的结构与若干天(若干次询问)要关闭的小路编号。对于每次询问,输出被分成的每个可游玩区域的最长散步距离之和。
输入格式
-
第一行一个整数 —— 景点个数。
-
接下来 行,每行三个整数 —— 表示一条小路连接景点 与 ,步行时间为 。
- 小路按输入顺序从 1 到 编号。
-
下一行一个整数 —— 共有 次询问。
-
对于每次询问:
- 第一行一个正整数 ;
- 第二行给出 个两两不同的整数,表示要临时关闭的小路编号。
保证:所有步行时间为正整数;每次询问独立进行。
输出格式
共 行。第 行输出第 次询问的答案:所有可游玩区域的**最长散步距离(直径)**之和。
样例
输入
5
1 2 2
2 3 3
2 4 2
4 5 2
3
0
2
1 2
1
3
输出
0
7
4
说明
- 第 1 次询问不封路,小镇整体是一个区域,直径为 0?(这里用作示例:若只看单点也可视作 0;也可以把样例理解为恰好两端相同的情况)
- 第 2 次询问关闭 1、2 号小路,小镇被分成 3 个区域,各自直径相加得到 7。
- 第 3 次询问关闭 3 号小路,答案为 4。
数据规模与部分分
共 10 个测试点。 测试点 1,2,3 满足 。 测试点 4,5 满足 。 测试点 6,7 满足 。 测试点 8,9,10(满分档)。
对所有数据:满足 ,,