题面
题目大意
在一颗边长为 1 1 1 的树上,添加一条或两条长度为 1 1 1 的路径,使遍历完整幅图,且经过添加的路径正好一次,并回到起点的路径长度最短,并输出这个长度。
题解
不加的情况
根据深搜的特点,每条路径必定会经过 2 2 2 次,即第一次访问和回溯。所以在不加的时候,最短路径一定是 2 ∗ ( n − 1 ) 2 * (n - 1) 2∗(n−1)。
加一条边的情况
因为不加时每条边都要经过两次,加了边之后的好处就是,可以不走原路返回,改为直接返回某一个点,于是要求最短的路径,就是要让节省的路径长度最长。而树中最长的路径就是树的直径,所以我们对于直径就不走原路返回,改为通过新添加的一条长度为 1 1 1 的路径直接返回直径的另一端。
所以答案为:
2 ∗ ( n − 1 ) − L + 1 2*(n-1)-L+1 2∗(n−1)−L+1
其中 L L L 为直径的长度,加一是因为我们走了一条长度为 1 1 1 的道路。
加两条边的情况
考虑在加一条边的基础上再加一条边,使路径最短。
那么新加的这条边为了使路径最短,思考方式自然和加一条边的时候相同。那么答案就是:
2 ∗ ( n − 1 ) − L 1 + 1 − L 2 + 1 2*(n-1)-L_1+1 - L_2 + 1 2∗(n−1)−