分治基础题选讲.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分治基础题选讲

分治基础题选讲 By jszyxw NOIP难度的分治 Codeforce #Round213 div1. E 给出一个n*m的01网格。 求有多少矩形中恰好包含k个1. n,m=2500 k=6 Codeforce #Round213 div1. E NOIP难度的分治 BZOJ4237 稻草人 田地需要满足以下条件: 田地的形状是边平行于坐标轴的长方形; 左下角和右上角各有一个稻草人; 田地的内部(不包括边界)没有稻草人。 给出每个稻草人的坐标,请你求出田地的个数 N≤1e5 BZOJ4237 稻草人 先将点按y轴排序,然后分治。 首先分治求出上下两块的答案,然后考虑左下角在下半部分,右上角在上半部分的答案 设左下角为(x1,y1),右上角为(x2,y2) 显然对于上部分有:对于所有横坐标在(x1,x2)的点,纵坐标≥y2 显然对于下部分有:对于所有横坐标在(x1,x2)的点,纵坐标≤y1 维护两个单调栈,枚举右上角,在单调栈上二分找符合条件的左下角即可 BZOJ2001 [Hnoi2010]City 城市建设 一个N个点M条边的无向图,要求支持如下操作: 修改一条边的边权,并输出当前最小生成树的边权和 N,M,Q ≤ 50 000 BZOJ2001 [Hnoi2010]City 城市建设 看起来不太好分治,因为问题规模始终是N个点,M条边。 考虑缩小问题规模 BZOJ2001 [Hnoi2010]City 城市建设 设q个询问里修改的边集为Q,边的全集为E,那么对于E-Q中的边,做一遍MST,MST中的边集设为G,那么对于E-Q-G中的边,不论询问怎么改变,这些边都不会在MST中,所以我们可以删除这些边。 这样边集大小变成n - 1 + q,  点集大小仍为n 之后将Q中的边的边权都赋值为-INF,这时做一遍MST,如果E-Q的边在MST中,这时代表就算修改的边最小时这些边也要选,也就是这些边是保证MST连通性的必要的边,这些边我们也没有必要考虑,因为必须要选,所以将这条边连接的两个点合并成一个点。 边数和点数都减少n - q - 1,边集大小 = (n  + q - 1) - (n - q - 1) = 2 * q,点集大小 = n - (n - q - 1) = q + 1 BZOJ2001 [Hnoi2010]City 城市建设 这样规模就变成了O(q)的了。 我们对询问分治,在分治的同时执行以上两个操作,总复杂度O(Q log^2 Q) BZOJ1095 [ZJOI2007]Hide 捉迷藏 维护一棵树,每个节点有两个状态:黑/白。 要求支持下列操作: 将黑点改为白点,白点改为黑点 询问树上黑点间最大的距离 N,Q ≤ 500 000 BZOJ1095 [ZJOI2007]Hide 捉迷藏 假如没有修改操作,应该是比较简单的树分治 我们点分治的时候维护子树内的最长路径,到重心的最长路径的最大值和次大值即可。 现在加入了修改操作,我们就用堆维护上述信息即可。 时间复杂度O(Q log^2 N) NOIP难度的分治 Uoj #55 紫荆花之恋 给出一个初始只有1个点的带权树。 每个点有个范围Ri,如果两个点满足Dis(i,j)=Ri+Rj,则他们是朋友。 每次可以添加1个叶节点,并询问此时树中有多少朋友。 n=10^5 强制在线。 Uoj #55 紫荆花之恋 如果这棵树是深度为logN的随机树怎么做? Uoj #55 紫荆花之恋 首先式子的形式是Dis(i,j)=Ri+Rj,变形得Dis(j,lca) – Rj = Ri - Dis(i,lca) 那么对于每个lca我们维护一个平衡树,把以lca为根的子树中所有的Dis(j,lca)-Rj全都扔进去 然后对于每个i,我们沿着父亲指针,把路径上的所有小于等于Ri-Dis(i,lca)的全都计入答案,然后把Dis(i,lca)-Ri加进路径上的平衡树 但是这样算重复,即在不是i和j的lca的节点中被算进去,那么我们对于lca(I,j)的每个子树再维护一个平衡树储存Dis(j,p)-Rj,从对应子树的平衡树中减掉这样的点对就行了 时间复杂度O(N log^2 N) Uoj #55 紫荆花之恋 但是树不是深度logN的随机树。。怎么办? 点分治生成的点分治树是深度logN的!用树分治! 但是每次插入新节点,会导致树分治失效,怎么办? 替罪咩! 用替罪羊树的思想,当点分治树不平衡时暴力重构即可。 时间复杂度O(N log^2 N) Uoj #55 紫荆花之恋 用什么平衡树呢? Splay?Avl?Treap?Set?替罪咩? 某学长曾说过:开O2的set比手打的平衡树快! 然后用set试了一下。。。T飞了! 实践说明平衡树常数:Splay 跳表Set Treap替罪

文档评论(0)

guoxiachuanyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档