CF1534简要题解

20 篇文章 0 订阅
20 篇文章 0 订阅

CF1534

  • A:二分图染色。
  • B:贪心将单独的一列往下减。
  • C:并查集。
  • D:先询问一次,然后选择奇数层或偶数层的点询问相邻的即可.
  • E:先钦定所有都是1,然后需要变成0,每一次选择尽量多的1变为0,不够的用0来补充,贪心下去即可。或者DP,设 f i f_i fi表示 i i i 1 1 1要操作多少次得到,可以将 f j , f k f_j,f_k fj,fk转移到 f j + k − 2 i f_{j+k-2i} fj+k2i,然后倒着模拟回去即可。

F

  • 主要需要简化模型之后发现性质。
  • 显然建图之后tarjan缩点,然后需要在DAG上选点,使得所有下往上第 a i a_i ai个关键点都能够被覆盖。
  • 然后简化一下,将能够被别的关键点到达的关键点删除,那么可以发现这时有一个很优美的性质:每一个点能够覆盖的关键点是一个区间。
  • 然后直接贪心即可。

G

  • 主要需要观察凸函数,并有一个优美的方式去维护它。
  • 首先将切比雪夫距离转化为曼哈顿距离,原图中的点 ( x , y ) (x,y) (x,y)在新图中的 ( x + y , x − y ) (x+y,x-y) (x+y,xy)上,那么原图中的移动变为了 ( + 1 , + 1 ) (+1,+1) (+1,+1) ( + 1 , − 1 ) (+1,-1) (+1,1),因此当 x = X x=X x=X时曼哈顿距离最小。
  • 现在我们需要优化一个简单的DP, f x , y f_{x,y} fx,y表示在 ( x , y ) (x,y) (x,y)的最小答案,显然固定一个 x x x f x , y f_{x,y} fx,y是关于 y y y的分段函数,进一步的这是一个凸函数(由于若干个凸函数加起来还是一个凸函数),并且斜率的总变化不超过 n n n
  • 现在我们需要维护两个操作:1.将原函数向两边扩充,2.将当前函数加上一个 V V V型的函数。
  • 考虑1操作只需要将最小值的区间扩大,两边顶点同时扩,因此我们可以对于极值左边和右边分别维护一个单调队列,单调队列可重复并且每一个点按顺序表示斜率1的变化,又有所有的端点根据 x x x加或减,因此不妨将 x x x当作全局tag,存 y − x y-x yx至堆中。
  • 考虑2操作,相当于是在 V V V的顶点插入两个点,表示斜率 + 2 +2 +2的变化,需要同时维护答案以及两个堆堆顶的变化,即有一个堆顶移到了另一边。
  • 至此就可以用优美的实现,简短而快速的搞定这题了。

H

  • 首先贪心选择叶子作为根,就能够将叶子到当前根的路径上的点分开,然后考虑dp计算这个选择的次数,只需要让当前点的路径接到儿子上,因此将儿子从大到小排序之后贪心选最大值最小。
  • 注意 f f f节点需要选择两个,因此对于所有 f f f需要换根。
  • 交互就模拟一下上面的贪心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值