bzoj2144 跳跳棋 二分&lca 神题

       这绝对是一道超级神题!!(表示自己智商低想不到/(ㄒoㄒ)/~~)。

       对于状态(x,y,z),看一下它能走到什么:

       中间的向外面跳->(2*x-y,x,z) ->(x,z,2*z-y);两边往中间跳:当y-x≠z-y时合法,不妨设y-x>z-y,那么->(y,2*y-x,z)。

       可以看到,不考虑特殊情况,往中间跳有一种情况;往两边跳有两种情况;

       可以发现,对于(x,y,z)往两边跳得到的状态(u,v,w),那么(x,y,z)同样是(u,v,w)往中间跳得到的状态!

       那么,我们将(u,v,w)往中间跳得到的状态(x,y,z)作为(u,v,w)的父亲,那么所有的状态刚好构成了一颗树!

       然后答案就变成了求树上两点的距离!

       (完了有点激动打了好多回车啊)回想一下普通的树上两点距离,需要得到两点的lca;更一般的需要快速得到某一个点的祖先,那么现在看一下在这道题目中,如何得到一个状态

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值