首页 > 其他 > 详细

[ZJOI2018]历史(LCT)

时间:2019-03-12 19:58:06      阅读:151      评论:0      收藏:0      [点我收藏+]

[Luogu4338] [BZOJ5212]

题意

给出一棵树,给定每一个点的 access 次数,计算轻重链切换次数的最大值,带修改.

先考虑不带修改怎么做

假设 u 的子树发生了两次 access ,那么当且仅当这两次 access 的点来自 u 的两个不同的儿子的子树,答案才会 +1

要使得答案最大,就是尽量让所有相邻发生的 access 都来自不同子树

把同类型的数挪到一边就是当 \(2\times h\ge t+1\) 时,答案是 \(2(t-h)\) ,否则是 \(t-1\)

考虑待修改怎么做

令$ f_i$表示 \(i\) 的子树 access 的总次数,如果 \(2f_i\ge f_{fa_i}+1\) 那么连实边 \((i,fa_i)\) 其他的都是虚边

因为 \(2(f_i+w)\ge(f_{fa_i}+w)+1\)所以实边还是实边,并且答案不会变化 \((\Delta=2[(f_{fa_i}+w)-(f_i+w)]-2(f_{fa_i}-f_i)=0)\)

所以我们只需要找到路径上的虚边进行修改就好了

题解

[ZJOI2018]历史(LCT)

原文:https://www.cnblogs.com/lizehon/p/10519171.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!