[APIO2010] 巡逻

题面

巡逻

题目大意

在一颗边长为 1 1 1 的树上,添加一条或两条长度为 1 1 1 的路径,使遍历完整幅图,且经过添加的路径正好一次,并回到起点的路径长度最短,并输出这个长度。

题解

不加的情况

根据深搜的特点,每条路径必定会经过 2 2 2 次,即第一次访问和回溯。所以在不加的时候,最短路径一定是 2 ∗ ( n − 1 ) 2 * (n - 1) 2(n1)

加一条边的情况

因为不加时每条边都要经过两次,加了边之后的好处就是,可以不走原路返回,改为直接返回某一个点,于是要求最短的路径,就是要让节省的路径长度最长。而树中最长的路径就是树的直径,所以我们对于直径就不走原路返回,改为通过新添加的一条长度为 1 1 1 的路径直接返回直径的另一端。
所以答案为:
2 ∗ ( n − 1 ) − L + 1 2*(n-1)-L+1 2(n1)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(n1)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值