luogu P5291 [十二省联考2019]希望
无论最终结果将人类历史导向何处
\(\quad\)我们选择
\(\quad\quad\)\(\large{希望}\)
诶我跟你讲,这题超修咸的
下面称离连通块内每个点距离不超过\(L\)的点为中心点.首先可以注意到,所有连通块的共同的中心点一定是个连通块,所以可以写一个暴力状压,表示中心点状态为\(S\)的方案数,然后随便枚举一个连通块转移即可
中心点是连通块很烦,考虑转化一下.其实答案为只考虑中心点为一个点的方案减去只考虑中心点为一条边上的两个点的方案,因为考虑任意一个连通块,在算中心点为一个点会算点数\(n\)次,在算中心点为一条边会算边数\(m\)次,然后又有连通块一定满足\(n-m=1\),所以这样算每个连通块都会被算一次
先考虑中心点为一个点,设\(f_{x,l}\)表示在\(x\)子树内,包含\(x\),且到\(x\)最远距离不超过\(l\)的连通块个数,转移就是\(f_{x,l}=\prod_{y\in son(x)} (f_{y,l-1}+1)\),就是每个点儿子可选或不选,然后还要设\(g_{x,l}\)表示不包含\(x\)子树其他点,包含\(x\),且到\(x\)最远距离不超过\(l\)的连通块个数转移是\(g_{x,l}=g_{fa,l-1}\prod_{y\in son(fa),y\neq x} (f_{y,l-2}+1)\).那么这个点的贡献就是\((f_{x,l}g_{x,l})^k\).一条边也类似,只不过注意两个到中心点的距离都要\(\le L\),所以是\((f_{x,l-1}(g_{x,l}-1))^k\)
这个暴力是\(O(nL)\)的,不过因为下标和深度有关,所以可以长链剖分优化.\(f\)的话,一个点先继承重链状态,然后轻儿子暴力乘上去.注意第二维大于轻儿子第二维最大值(也就是\(y\)往下最多能延伸多深,假设是\(dep_y\))的部分,是要乘上\(f_{y,dp_y}\)的,所以还要支持后缀乘,用个可持久化线段树维护即可(因为要算g要还原每个\(x\)的dp值)
然后就是\(g\),首先重链,重儿子直接继承当前节点状态.对于轻儿子,看上去要转移的状态比较多,不过可以注意到一个东西,就是一个点\(x\)有用的\(g\)的第二维的范围是\([L-dp_x,L]\),那么只要转移这些范围就好了,复杂度是\(\sum\)轻儿子的\(dep\),所以复杂度也是对的.注意转移到儿子时要扣掉自己本身的贡献,一个想法是用所有儿子\(f\)的乘积乘上自己\(f\)的逆元,但是自己的\(f\)是有可能为0的,所以转化成前缀积乘后缀积的形式,后缀积可以在做的时候维护
然后那个可持久化线段树有个log,很不优秀.然后我们又发现前缀积其实在做的时候已经求过了,所以我们只要开个栈栈序撤销合并的操作就得到前缀积.然后那个后缀乘也可以看做是全部乘一个值然后前缀乘上逆元,所以考虑维护dp数组的乘法标记\(a\)和加法标记\(b\),我们在dp数组上存值\(x\),然后真实值应该是\(ax+b\),每次后缀乘\(c\),直接给\(a\)和\(b\)乘上\(c\),然后前面的值暴力改成\((ax+b-bc)(ac)^{-1}\).还有就是可能\(c=0\),那么在维护赋值标记\(pl,nm\),表示下标为\(pl\)之后的值都是\(nm\),每次把\(nm\)改成\(-b*a^{-1}\)即可
不过逆元的问题还是没解决.我们发现要求逆元的值一定是\(f_{x,dep_x}\),那么可以参考阶乘求逆元,先把前缀积搞出来,然后求出最后一项的逆元,然后用前缀积递推出就可以算出每个数的逆元
差不多了,然后剩下的就看你的了(逃

luogu P5291 [十二省联考2019]希望的更多相关文章
- 【题解】Luogu P5291 [十二省联考2019]希望
ytq鸽鸽出的题真是毒瘤 原题传送门 题目大意: 有一棵有\(n\)个点的树,求有多少方案选\(k\)个联通块使得存在一个中心点\(p\),所有\(k\)个联通块中所有点到\(p\)的距离都\(\le ...
- Luogu P5285 [十二省联考2019]骗分过样例
Preface ZJOI一轮被麻将劝退的老年选手看到这题就两眼放光,省选也有乱搞题? 然后狂肝了3~4天终于打完了,期间还补了一堆姿势 由于我压缩技术比较菜,所以用的都是非打表算法,所以一共写了5K- ...
- Luogu P5290 [十二省联考2019]春节十二响
这题是最近看到的今年省选题中最良心的一道了吧 看题+想题+写题都可以在0.5h内解决,送分含义明显啊 首先理解了题意后我们很快就能发现两个点如果要被分在一段那么必须在它们的祖先处合并 首先我们考虑下二 ...
- Luogu P5284 [十二省联考2019]字符串问题
好难写的字符串+数据结构问题,写+调了一下午的说 首先理解题意后我们对问题进行转化,对于每个字符串我们用一个点来代表它们,其中\(A\)类串的点权为它们的长度,\(B\)类串的权值为\(0\) 这样我 ...
- Luogu P5283 [十二省联考2019]异或粽子
感觉不是很难的一题,想了0.5h左右(思路歪了,不过想了一个大常数的两只\(\log\)做法233) 然后码+调了1h,除了一个SB的数组开小外基本上也没什么坑点 先讲一个先想到的方法,我们对于这种问 ...
- luogu P5289 [十二省联考2019]皮配
传送门 首先考虑一个正常的dp,设\(f_{i,j,k}\)为前\(i\)个学校,\(j\)人在\(\color{#0000FF}{蓝阵营}\),\(k\)人在\(\color{#654321}{吔} ...
- 【题解】Luogu P5284 [十二省联考2019]字符串问题
原题传送门 我用sa做的本题 (码量似乎有点大) 先对原串建sa 考虑如何建图: 从大到小枚举长度len 先将height中等于len的两个位置在并查集合并起来,将lst也合并(lst是链表) 再将长 ...
- luogu P5290 [十二省联考2019]春节十二响 优先队列_启发式合并
思维难度不大,在考上上写的启发式合并写错了,只拿了 60 pts,好难过QAQ 没什么太难的,在考场上想出链的部分分之后很容易就能想到正解.没错,就是非常短的启发式合并.注意一下,写的要漂亮一点,否则 ...
- 【题解】Luogu P5283 [十二省联考2019]异或粽子
原题传送门 看见一段的异或和不难想到要做异或前缀和\(s\) 我们便将问题转化成:给定\(n\)个数,求异或值最靠前的\(k\)对之和 我们珂以建一个可持久化01trie,这样我们就珂以求出每个值\( ...
随机推荐
- 【转】在子线程中new Handler报错--Can't create handler inside thread that has not called Looper.prepare()
在子线程中new一个Handler为什么会报以下错误? java.lang.RuntimeException: Can't create handler inside thread that has ...
- (十四)Exploring Your Data
Sample Dataset Now that we’ve gotten a glimpse of the basics, let’s try to work on a more realistic ...
- (六)List All Indices
Now let’s take a peek at our indices: 现在让我们来看看我们的指数: GET /_cat/indices?v And the response: health st ...
- LCA-RMQ+欧拉序
还是那一道洛谷的板子题来说吧 传送门 其实好几天之前就写了 结果dr实在是太弱了 没有那么多的精力 于是就一直咕咕咕了 哎 今天终于补上来了 LCA概念传送门 RMQ传送门 这个算法是基于RMQ和欧拉 ...
- 洛谷 P1226 【模板】快速幂||取余运算
题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...
- vuex的使用步骤
第一步: 安装vuex:npm install vuex --save 第二步:在src下创建文件夹store及文件index.js import Vue from 'vue'; import Vue ...
- 爬虫基础(四)-----MongoDB的使用
------------------------------------------------------------------------摆脱穷人思维 <四> :减少无意义的频繁决策 ...
- iOS抓包工具Charles
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP ...
- 静态类(C#)
基本简介: 类可以声明为 static 的,以指示它仅包含静态成员.不能使用 new 关键字创建静态类的实例.静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 ( ...
- SSH服务器拒绝了密码,请再试一次
使用Xshell连接ubuntu后,出现: SSH服务器拒绝了密码,请再试一次! 输入: cd /etc/ssh/ 继续: vim sshd_config 若此时提示没有安装vim,那我们安装以下: ...