P3233 [HNOI2014]世界树(虚树/倍增/动态规划)

本文介绍了如何利用数据结构解决HNOI2014中关于控制点查询的问题。首先建立虚树,处理特殊情况,然后使用栈维护右链并建立边。接着进行动态规划计算每个点的最近控制点。对于不同类型的点,分别讨论它们的控制情况,如直接连接到虚树节点的点和虚树节点间的节点。最后,通过倍增算法找到分割点,计算答案。整个过程涉及到树的遍历、动态规划和区间查询等技术。
摘要由CSDN通过智能技术生成

P3233 [HNOI2014]世界树

每次给出mi个点,查询每个点控制的点的个数,每个点由离他最近编号最小的点控制。

首先按照套路建出虚树,注意特判1节点,然后用栈维护右链,然后不断弹栈建边。
然后进行dp,求解出虚树上每个点的最近控制点,对于控制点就是自己,需要两边dfs,第一遍处理子树,第二遍从上到下dp,这样就处理出在整个树上的控制点。

然后对于其他点我们需要分类讨论:

第一类就是直接连接到虚树节点上,但是不包含虚树节点的子树,这些点必然由g[u]控制,具体计算size可以用siz[u]减去包含虚树节点的siz。

第二类就是在虚树节点之间的节点,这一部分是一个链上挂了许多子树,并且其中没有虚树节点,这一部分要么由g[u]控制,要么由g[v]控制。然后中间必然有一个分割点,我们可以考虑倍增求解这个点的位置。
然后计算答案还需要知道v所对应子树是u的哪一个儿子,这个也可以通过倍增求解,然后就可以用这些点来计算对应这一部分的贡献了。
注意这里的虚树节点可能是lca节点,所以对应贡献必须计算到g[u]和g[v]上。

代码细节:

  1. 建立虚树的时候一定要小心,每次弹栈都需要建边
  2. 还有倍增寻找分割点的时候要注意,两端点属于同一个控制点的情况,虽然可以直接处理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
根据引用\[1\]和引用\[2\]的描述,题目中的影魔拥有n个灵魂,每个灵魂有一个战斗力ki。对于任意一对灵魂对i,j (i<j),如果不存在ks (i<s<j)大于ki或者kj,则会为影魔提供p1的攻击力。另一种情况是,如果存在一个位置k,满足ki<c<kj或者kj<c<ki,则会为影魔提供p2的攻击力。其他情况下的灵魂对不会为影魔提供攻击力。 根据引用\[3\]的描述,我们可以从左到右进行枚举。对于情况1,当扫到r\[i\]时,更新l\[i\]的贡献。对于情况2.1,当扫到l\[i\]时,更新区间\[i+1,r\[i\]-1\]的贡献。对于情况2.2,当扫到r\[i\]时,更新区间\[l\[i\]+1,i-1\]的贡献。 因此,对于给定的区间\[l,r\],我们可以根据上述方法计算出区间内所有下标二元组i,j (l<=i<j<=r)的贡献之和。 #### 引用[.reference_title] - *1* *3* [P3722 [AH2017/HNOI2017]影魔(状数组)](https://blog.csdn.net/li_wen_zhuo/article/details/115446022)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [洛谷3722 AH2017/HNOI2017 影魔 线段 单调栈](https://blog.csdn.net/forever_shi/article/details/119649910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值