码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)

时间:2017-12-30 19:10:55      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:gpo   影响   简单   两种   problem   line   display   变化   res   

一.[NOI2014]起床困难综合症

题目描述

网址:https://daniu.luogu.org/problemnew/show/2114
大意:
有一条链,链上每一个节点包含一个位运算f 与 一个值w , 一个值V从链首出发。
每经过一个点u ,有: \(V = V (f)w\),其中f = {&、|、^}中的一个。
现在限定初始值V在区间\([0,R]\)中,请选定一个值,使得最终结果最大。

题目解法

史上最简单的NOI题目,当时肯定一群大佬秒A。
显然对于二进制,每一位的运算之间没有影响。
所以对于每一位,假设其为0或1,但进去暴力跑一遍的到结果res[0]与res[1]。
最后从高位向低位贪心,此位只要不超过R的限制就选择res=1的数字即可。

实现代码

不存在的

二、LuoguP3613 睡觉困难综合征

题目描述

网址:https://daniu.luogu.org/problemnew/show/3613
大意:
类似与上面那道题,树上的每一个节点有一个位运算符与一个权值。
那么现在这颗树会有两种操作:

  • [1] 修改\(x,y,z\):把x节点运算符修改为y,权值为z
  • [2] 查询\(x,y,z\): 查询把x到y这条路径作为上题中的链,初值V属于\([0,z]\)时的最大结果。
    对于每一个询问操作,选择一个初值V,使其通过路径后的值最大。
    (节点数,操作数)<=100000,时限0.5 sec。

题目解法

Luogu 的大牛们一改,这题就变的相当有难度了。
现在路径在不断变化,链也不断在变化,不可能向之前那样暴力走一遍路径了。
显然需要分离路径要用到\(LCT\)\(LCT\)维护什么呢?
正确的做法是维护正向与反向两条道路每一位都为0的结果与每一位都为1的结果。
我们记\(oder[i]\)表示正向的移动结果,\(dder[i]\)为反向的移动结果。
那么每一个点,我们维护四个东西:\(oder[i][0]\),\(oder[i][1]\),\(dder[i][0]\),\(dder[i][1]\)
考虑一下如何转移,以正向结果的转移为例。
假设我们已经的得到了f0,f1与g0,g1, 现在合并。那么转移为:
\[h0 = (~(f0) And (g0))Or((f0) And (g1))\]
\[h1 = (~(f1) And (g0))Or((f1) And (g1))\]
即本次走了0

实现代码

不存在的

Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)

标签:gpo   影响   简单   两种   problem   line   display   变化   res   

原文地址:https://www.cnblogs.com/GuessYCB/p/8150608.html

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