Gravatar
天一阁
积分:1726
提交:544 / 1314
呜呜,没有打check_control竟然过了5个点

Gravatar
天一阁
积分:1726
提交:544 / 1314
回复 @digital-T :
其实如果明白了思路,也没那么麻烦

Gravatar
digital-T
积分:2213
提交:586 / 1311
标程……太麻烦了!
1、对于一棵子树,若这棵子树的根节点上有检查站,则这棵子树就被封锁了,判断是否被封锁可以递归的实现
2、存在一个最优方案,在这个方案中任意一个军队在没有经过根节点的情况下都不会向下移动(远离根的方向)
3、存在一个最优方案,若某军队经过了根,则这军队最终只会到达根的某个儿子,不会再向下走
4、若所有军队只向上移动,一棵子树在某个时刻被封锁后,在以后任意时刻只要这棵子树存在军队,则这棵子树仍被封锁
5、只有空闲的军队才会经过根节点
6、在最终时刻,若根的某个儿子在空闲军队到达时还未被封锁,则最优方案中一定是用空闲军队来封锁这棵子树
所以我们最后有了这样的思路:
首先二分答案,也就是最终时刻T。
接着对于给定的T,计算出每支军队均能想上走多远(以离根的距离为准,若超过根以负数计算)。
然后找出哪些军队是空闲的,根的哪些儿子没有被覆盖。
最后,用离根距离最小(当然有可能为负)的空闲军队去离根最远的儿子上建立检查站,以此类推,若此时仍然有儿子没有被封锁,则最终答案大于T,否则最终答案小于等于T。

Gravatar
QWERTIer
积分:432
提交:101 / 269

Gravatar
cstdio
积分:4748
提交:1198 / 2108
好飘逸的思路……