码迷,mamicode.com
首页 > 编程语言 > 详细

【C++】APIO2010 巡逻

时间:2018-07-25 15:13:14      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:分析   角度   lin   要求   tps   描述   .com   连接   端点   

1.题目描述

Luogu-P3629

Bzoj-1912

2.分析

1.对于原图,我们可以知道,若要回到节点1,每一条边至少经过两次(来一次,去一次),所以此时$ans=(n-1)*2$

2.不妨设$L_1$为第一条路径长,$L_2$为第二条路径长,当$k=1$时,从贪心的角度来考虑,肯定是要将距离最远的两个点连接在一起

3.若要找出距离最远的两个点,这两个点肯定是树的任意一条直径中的两个端点

4.当我们将这两个点连接时,显然会形成一个环,此时$ans=(n-1)*2-L_1+1$

5.故当$k=2$时,连接两个点$(u,v)$之后,又会形成一个环

6.此时存在两种情况:

  1°两个环没有重叠部分

  2°两个环有重叠部分

7.对于情况1,树上$(u,v)$之间原有的路径只需经过一次,$ans$继续减小

8.对于情况2,如果我们依然按照$k=1$的情况建立新的路径,则两个环重叠的部分就不会有巡逻车经过,不满足原题要求。

9.所以我们不得不让巡逻车必须经过这些边。

10.最终,我们使得这些重叠的边又经过了两次,此时$ans=(n-1)*2-L_1+1-L_2+1$

【C++】APIO2010 巡逻

标签:分析   角度   lin   要求   tps   描述   .com   连接   端点   

原文地址:https://www.cnblogs.com/water-mi/p/9365911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!