一道GESP六级题,背后是提高组必须掌握的树论思维
一、这道题到底在考什么?
GESP 2025年9月六级真题《货物运输》讲的是这样一个问题:
A国有 n 座城市,1号城市是首都,城市由 n-1 条双向道路连接。满载货物的车队从首都出发,需要经过所有城市,最后可以不返回首都。每条路可以走多次,求最小总路程。
这道题在GESP六级中属于压轴题,但它的核心解法其实非常简洁:
答案 = 所有边权之和 × 2 - 从根出发到最远节点的距离很多同学拿到这道题第一反应是“贪心选最短边走”,但很快就发现不对——树的结构决定了某些路你绕不过去,必须走。
二、为什么公式成立?
想象你从根出发,要到达每一个节点。
由于树没有环,要去到任何一个子树,你必须沿着那条唯一的路径走下去,然后再走回来——除非你最后选择停在那条路径的终点。
每一条边至少要被走两次吗?
不一定。如果最后停在某个节点,从根到这个节点的路径上的每一条边都只需要走一次(去程),不需要走回程。其他所有边仍然要走两次。
为了让总路程最小,你会选择哪条路径只走一次?
显然,选择从根出发最长的那一条路径,这样省掉的路程最多。
这就是公式 sum * 2 - maxDist 的来源。
三、从这道题看入门组到提高组的思维跃迁
这道题虽然出现在GESP六级,但它背后涉及的思想,恰恰是提高组树论题目的核心。
我们先来看这道题在入门组和六级之间的“身份”定位。
GESP六级恰好卡在“会用DFS”和“会做树上决策”之间。
它不再满足于让你“遍历树”,而是要求你在遍历的基础上做最优化决策。从遍历到决策,这就是从入门组到提高组最核心的能力跨越。
货物运输这道题就是这种过渡的典型代表:
你需要理解树上的路径结构 你需要自己推导出“省掉最长路径”的贪心策略 你还要意识到不能直接把每条边都乘以2
但它的代码实现仍然很简单——DFS一遍求最远距离。这是典型的“思维难度>代码难度”的提高组出题风格。
四、延伸:这棵树还能省掉哪条路?
如果你觉得“省掉最长路径”的直觉已经掌握了,那我们可以再往前推一步:
如果起点不是根节点呢?
前两种在GESP六级或入门组扩展中可能出现,后两种是提高组常客。这一条路径,从“省掉最长路径”到“省掉树的直径”,本质上是在问同一个问题:哪条路可以只走一次?
五、提高组树论方向扩展练习
如果货物运输这道题你已经吃透了,以下几道题就是下一步的方向:
1. 树的直径
题意:求树中最长路径的长度,以及求树的中心节点。
树上的最长路径不一定是根出发的,它是任意两点之间的最长距离。货物运输中从根出发到最远节点和整棵树的直径之间的区别,就是入门组到提高组的第一个台阶。
2. 树上DP
题意:在树上做动态规划,比如“没有上司的舞会”,选择一些节点使权值最大,且不能选择相邻节点。
这是提高组最常见的树论题型之一,本质是“在DFS遍历的过程中维护状态”。
3. LCA(最近公共祖先)与树上路径
题意:求树上任意两点的距离,或者快速判断某点是否在某个路径上。
这类题目在提高组中是高频考点,也是处理树上路径问题的利器,通常结合倍增法预处理。NOIP2015的《运输计划》和NOIP2018的《旅行》都是这类题目的代表。
六、结语
《货物运输》这道题的代码很短——一个DFS求最远距离,一句公式输出答案。
但它的思维链条很长:
理解:树上的路径是唯一的,每条边在遍历中至少要走两次
决策:最后一条路径可以不返回,选择最长的来省路程
推广:如果把根换成任意起点呢?如果必须经过指定节点呢?
一道GESP六级的题目,背后是提高组的必考思维。如果孩子能把这道题的逻辑讲清楚、把公式的来龙去脉推导明白,那么恭喜你——他已经在从“会用工具”向“理解原理”迈进了。
夜雨聆风