传送门


官方题解其实讲的挺清楚了,就是锅有点多……

一些有启发性的部分分

L=N

一个经典(反正我是不会)的容斥:最后的答案=对于每个点能够以它作为集合点的方案数-对于每条边能够以其两个端点作为集合点的方案数。原因是:对于每一种合法方案,集合点一定是树上的一个连通块,满足\(n=m+1\)。算点时,这种方案被算了\(n\)次;算边时,这种方案被算了\(m=n-1\)次,所以每一个方案都恰好被算了一次。

有\(DP\):设\(f_i-1\)表示选择了包含\(i\)和\(i\)的子树中的点的一个连通块的方案数,转移枚举每一个儿子选不选。然后设\(g_i\)表示以\(i\)为原树的根,选择了包含\(i\)和\(i\)的子树中的点的一个连通块的方案数,这个在求完\(f\)之后换根DP,换根的时候可以同时计算出每条边的方案。

NL较小

改一下\(N=L\)的DP:设\(f_{i,j}-1\)表示选择了包含\(i\)和\(i\)的子树中的点的一个连通块,其中距离\(i\)点最远的点与\(i\)距离\(\leq j\)的方案数,\(g_{i,j}\)表示以\(i\)为原树的根,选择了包含\(i\)和\(i\)的子树中的点的一个连通块,其中距离\(i\)点最远的点与\(i\)距离为\(\leq j\)的方案数。

同样可以求完\(f\)后换根DP求\(g\),但是有个问题:如何从\(f_{fa_x}\)中去掉\(f_x\)的贡献。可以在计算\(f\)的时候计算每一个点合并所有孩子的一个前缀的答案、合并所有孩子的一个后缀的答案,这样把一个前缀和一个后缀拼起来就可以得到去掉\(f_x\)的贡献的\(f_{fa_x}\)。

枚举一下点和边,方案数可以直接算

52pts代码

k=1

可以枚举选择的连通块的根,用长链剖分+线段树优化,与正解关系不大所以略过

正解

从\(NL \leq 10^7\)开始。稍微修改一下\(g_{i,j}\)的定义:设\(g_{i,j}\)表示选择\(i\)、不选择\(i\)的子树,选择的连通块中最大距离\(\leq j\)的方案数。

f的优化

注意到\(f\)可以长链剖分优化。在长链剖分的转移中我们需要支持后缀乘(因为后缀有一段要乘的值相同)、整体加(转移完成之后所有\(f_{i,j}\)需要\(+1\)),可以给长链剖分打乘法标记\(a\)和加法标记\(b\)解决,一次后缀乘就把前面没有乘的部分乘上逆元。可能会有乘\(0\)的问题,所以还需要一个后缀赋值标记,当乘\(0\)时把当前的后缀赋值为\(-\frac{b}{a}\)。

g的优化

\(g\)是一个换根DP,但是也可以用长链剖分优化。将重链和轻边的转移分开考虑:①对于重链直接暴力将轻儿子的\(f\)值转移过来,复杂度跟长链剖分一样;②对于轻边,假设这条轻边转移到的点\(x\)的子树深度为\(p\),那么因为在最后统计答案的时候只需要每个点的\(g_{x,L}\),所以\(x\)子树中只有\(g_{x,j}(j \in [L - p , L])\)有用,可以只转移这一些值。那么每一条轻边就只会转移轻子树深度个\(g\),总复杂度也是均摊\(O(n)\)的

g的转移时的一个问题

我们还需要解决在转移\(g\)的过程中要取孩子的一个前缀和一个后缀的问题。可以主席树但是\(O(nlogn)\)有点慢。考虑按照求\(f\)时DFS顺序的反序DFS求\(g\),我们到达一个点、即将递归到下一个点的时候,将这个点对于当前点的\(f\)的贡献消除,这样可以得到前缀的值,再拿另一个数组维护一下后缀的\(f\)值就可以得到前缀和后缀。支持撤销只需要在每一次从轻边修改一个点时把所有标记和将要修改的位置的值记录下来打包丢到一个栈里面。

线性求逆元

有一个预处理逆元的科技:可知要求逆元的数一定是\(f_{x , p}\),其中\(p\)是\(x\)的子树大小,所以用\(L=N\)部分分的方法将所有\(dp_{x,p}\)预处理出来,然后用类似于预处理阶乘逆元的方式预处理逆元,在更新乘法标记\(a\)的同时同步更新\(a^{-1}\),就可以做到严格的\(O(n)\)求解。

细节非常非常的多……写题两小时调试一整天

代码

LOJ3053 十二省联考2019 希望 容斥、树形DP、长链剖分的更多相关文章

  1. luogu P5291 [十二省联考2019]希望

    luogu loj 无论最终结果将人类历史导向何处 \(\quad\)我们选择 \(\quad\quad\)\(\large{希望}\) 诶我跟你讲,这题超修咸的 下面称离连通块内每个点距离不超过\( ...

  2. 洛谷 5291 [十二省联考2019]希望(52分)——思路+树形DP

    题目:https://www.luogu.org/problemnew/show/P5291 考场上写了 16 分的.不过只得了 4 分. 对于一个救援范围,其中合法的点集也是一个连通块. 2n 枚举 ...

  3. 【题解】Luogu P5291 [十二省联考2019]希望

    ytq鸽鸽出的题真是毒瘤 原题传送门 题目大意: 有一棵有\(n\)个点的树,求有多少方案选\(k\)个联通块使得存在一个中心点\(p\),所有\(k\)个联通块中所有点到\(p\)的距离都\(\le ...

  4. [十二省联考2019]字符串问题——后缀自动机+parent树优化建图+拓扑序DP+倍增

    题目链接: [十二省联考2019]字符串问题 首先考虑最暴力的做法就是对于每个$B$串存一下它是哪些$A$串的前缀,然后按每组支配关系连边,做一遍拓扑序DP即可. 但即使忽略判断前缀的时间,光是连边的 ...

  5. [十二省联考2019]异或粽子——可持久化trie树+堆

    题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...

  6. 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)

    [BZOJ5495][十二省联考2019]异或粽子(主席树,贪心) 题面 BZOJ 洛谷 题解 这不是送分题吗... 转异或前缀和,构建可持久化\(Trie\). 然后拿一个堆维护每次的最大值,每次如 ...

  7. 【BZOJ5496】[十二省联考2019]字符串问题(后缀树)

    [BZOJ5496][十二省联考2019]字符串问题(后缀树) 题面 BZOJ 洛谷 题解 首先显然可以把具有支配关系的串从\(A\)到\(B\)连一条有向边,如果\(B_i\)是\(A_j\)的前缀 ...

  8. 【BZOJ5498】[十二省联考2019]皮配(动态规划)

    [BZOJ5498][十二省联考2019]皮配(动态规划) 题面 BZOJ 洛谷 题解 先考虑暴力\(dp\),设\(f[i][j][k]\)表示前\(i\)所学校,有\(j\)人在某个阵营,有\(k ...

  9. P5290 [十二省联考2019]春节十二响

    题目地址:P5290 [十二省联考2019]春节十二响 骗分方法 如果你实在一点思路也没有,暴力都不会打,那么请考虑一下骗分. 方法一 输出所有 \(M\) 的和. 期望得分:0分. 实际还有5分 方 ...

随机推荐

  1. 菜鸟系列docker——docker基本概念(1)

    docker基本概念 1.准备 这里先介绍容器技术,后续再介绍docker.docker是容器的一种,除docker以外,还存在coreos.不过在当前趋势下容器和docker基本上可以划为等号了. ...

  2. JavaScript 基础结构

    注释      代码注释可以使用//或者/* */ // 这是一个单行注释 /* * 这是 * 一个 * 多行 * 注释 */ 变量      变量用于存储数据,在同一作用域内变量不得重名,定义语法: ...

  3. [Redis] redis的设计与实现-对象系统

    1.redis并没有直接使用前面的数据结构实现键值对数据库,而是基于数据结构创建了一个对象系统,字符串对象/列表对象/哈希对象/集合对象/有序集合对象都用到了至少一种前面的数据结构2.针对不同的使用场 ...

  4. Java开发笔记(五十一)多态的发生场景

    江湖上传闻,面向对象之所以厉害,是因为它拥有封装.继承与多态三项神技,只要三板斧一出,号令天下谁敢不从.前面费了老大的劲才讲清楚封装和继承,那么多态又是怎样的神乎其神呢?下面先通过一个简单的例子来说明 ...

  5. Android开发——使用intent传递对象

    intent传递对象有两种方法: 方式一:Serializable 方式 方式二:Parcelable方式 在这里不多介绍了,这一篇就是快速上手使用教程,至于详细原理介绍的,请看这一篇http://w ...

  6. 在sublimen中整理CSS代码及其兼容性问题

    1,使用鼠标选中前面浅灰色缩进. 2,Ctrl+H 查找替换  点击 Find All 查找全部缩进. 3,按backspace向后删除两次,如下图所示: 4,向下按一次方向键,再向左按一次方向键,最 ...

  7. splay详解(二)

    前言 在上一节中,我们讲述了Splay的核心操作rotate与splay 本节我会教大家如何用这两个函数实现各种强大的功能 为了方便讲解,我们拿这道题做例题来慢慢分析 利用splay实现各种功能 首先 ...

  8. 后台返回excel文件流,js下载

    /** 下载excel */ downloadExcel(data: Blob): void { var blob = new Blob([data], { type: 'application/vn ...

  9. JQuery显示,隐藏和淡入淡出效果

    为了把JQuery搞熟悉,看着菜鸟教程,一个一个例子打,边看边记,算是一晚上的一个小总结吧.加油,我很本但是我很勤奋啊.系统的了解它,就要花时间咯. <!DOCTYPE html> < ...

  10. cmd切换目录

    想必大家都用过命令行工具来完成一些骚操作: 今天我在用cmd命令的时候,需要切换不同的目录来获取我所需要的文件,但是发现用cd的话切换不了: 如下图所示,我用cd切换到E盘下的一个文件夹,但是按回车之 ...