Link
Solution
好题! 首先,围栏的凸包之外的树一定是圈不到的,就不管它们,把答案加上。 而凸包里面的是一定要圈的,因为要圈一个最多得多建立3个栏杆,建栏杆的花费肯定比舍弃树的代价小。 然而,圈凸包不一定是最优的,最优的一定是能圈起所有凸包内树的最小的环。 下一步转化就非常厉害了: 对于环上的任意一条边,一定满足凸包内的树都在它的同侧。 那就枚举每对围栏(有向,即需要枚举和),用叉积判断是否所有的树都在它的左侧。如果是,就把到连一条长度为的边。 最后用扩展Floyd求最小环即可。
Tips
这个解法依然是通过观察答案性质得到的。
Code
1 | //Code by Lucida |