题解[HEOI2013]SAO.md
题意
给定一棵树,边有方向。要给点重标号,使得边都由小编号指向大编号,求重标号方案数。
\(n\le10^5\)
思路
有关树的计数。套路性考虑树形 DP。
设计状态 \(f_{u}\) 表示 \(u\) 的子树的合法重标号方案数。如何转移?发现不好转移。
考虑什么情况下可以转移呢?发现转移是合并当前 \(u\) 子树中已经考虑了部分的状态和其某还未考虑的儿子 \(v\) 的子树的状态,而转移合法只要保证 \(u\) 和 \(v\) 在重标号中相对大小关系符合边上的限制。那么我们考虑改状态为 \(f_{u,i}\) 表示 \(u\) 的子树重标号且 \(u\) 的新编号为 \(i\) 的方案数。如何转移?
大于和小于的情况是对称的,所以我们只讨论 \(u\) 的新编号要小于 \(v\) 的情况,另一种情况的转移类似。我们考虑状态 \(f_{u,i}\) 能转移到什么状态。考虑在新的重标号方案中,在 \(v\) 的子树中拿 \(j\) 个点标上小于 \(i+j\) 的编号,\(u\) 标上编号 \(i+j\),那么考虑转移方程中需要哪些系数呢?首先,考虑 \(f_{u,i}\) 能与哪些 \(f_{v,k}\) 合并得到新的状态,发现 \(v\) 子树中前新编号前 \(j\) 小的点都拥有小于 \(i\) 的新编号,而 \(v\) 的新编号不能小于 \(u\),所以要保证 \(k>j\),也就说这次转移中合法的 \(v\) 的子树重编号方案数是 \(\sum\limits_{k=j+1}^{siz_v}f_{v,k}\)。其他系数?要在 \(i+j-1\) 个新编号小于 \(i+j\) 的点中选 \(j\) 个点来自 \(v\) 的子树,这里需要乘上 \(\binom{i+j-1}{j}\)。新编号大于 \(i+j\) 的同理,乘上 \(\binom{siz_u+siz_v-i-j}{siz_v-j}\)。总的式子就是 \(f_{u,i+j}+=\binom{i+j-1}{j}\binom{siz_u+siz_v-i-j}{siz_v-j}f_{u,i}\sum\limits_{k=j+1}^{siz_v}f_{v,k}\)。发现前缀和可以优化掉那个 \(\sum\)。统计答案就是 \(\sum\limits_{i=1}^nf_{1,i}\)。
计算一下复杂度,看似是 \(O(n^3)\)?每次合并复杂度为 \(siz_u\times siz_v\),这与树形背包是一样的复杂度,所以总复杂度应该是 \(O(n^2)\)。可以理解为 \(u\) 子树中已考虑的每个点和 \(v\) 子树中每个点都 \(O(1)\) 计算一次,发现每对点都只会在其 LCA 处计算一次,所以总复杂度是点对数即 \(O(n^2)\)。
实现
void DP(int u,int fa){
sz[u]=1;
for(int i=1;i<=n;++i)
f[u][i]=0;
f[u][1]=1;
for(int ie=head[u],v=e[ie].t;ie;ie=e[ie].n,v=e[ie].t)
if(v!=fa){
DP(v,u);
for(int i=1;i<=sz[u]+sz[v];++i)
tmp[i]=0;
if(e[ie].op)
for(int i=1;i<=sz[u];++i)
for(int j=1;j<=sz[v];++j)
MAdd(tmp[i+j-1],Mul(Mul(Add(g[v][sz[v]],MOD-g[v][j-1]),f[u][i]),Mul(C(i+j-2,j-1),C(sz[u]-i+sz[v]-j+1,sz[v]-j+1))));
else
for(int i=1;i<=sz[u];++i)
for(int j=1;j<=sz[v];++j)
MAdd(tmp[i+j],Mul(Mul(g[v][j],f[u][i]),Mul(C(i+j-1,j),C(sz[u]-i+sz[v]-j,sz[v]-j))));
sz[u]+=sz[v];
for(int i=1;i<=sz[u];++i)
f[u][i]=tmp[i];
}
for(int i=1;i<=sz[u];++i)
g[u][i]=Add(g[u][i-1],f[u][i]);
}
题解[HEOI2013]SAO.md的更多相关文章
- 【BZOJ3167】[HEOI2013]SAO(动态规划)
[BZOJ3167][HEOI2013]SAO(动态规划) 题面 BZOJ 洛谷 题解 显然限制条件是一个\(DAG\)(不考虑边的方向的话就是一棵树了). 那么考虑树型\(dp\),设\(f[i][ ...
- P4099 [HEOI2013]SAO
P4099 [HEOI2013]SAO 贼板子有意思的一个题---我()竟然没看题解 有一张连成树的有向图,球拓扑序数量. 树形dp,设\(f[i][j]\)表示\(i\)在子树中\(i\)拓扑序上排 ...
- BZOJ 3167: [Heoi2013]Sao
3167: [Heoi2013]Sao Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 96 Solved: 36[Submit][Status][D ...
- 【BZOJ3167/4824】[Heoi2013]Sao/[Cqoi2017]老C的键盘
[BZOJ3167][Heoi2013]Sao Description WelcometoSAO(StrangeandAbnormalOnline).这是一个VRMMORPG,含有n个关卡.但是,挑战 ...
- 【做题记录】 [HEOI2013]SAO
P4099 [HEOI2013]SAO 类型:树形 \(\text{DP}\) 这里主要补充一下 \(O(n^3)\) 的 \(\text{DP}\) 优化的过程,基础转移方程推导可以参考其他巨佬的博 ...
- 3167: [Heoi2013]Sao [树形DP]
3167: [Heoi2013]Sao 题意: n个点的"有向"树,求拓扑排序方案数 Welcome to Sword Art Online!!! 一开始想错了...没有考虑一个点 ...
- P4099 [HEOI2013]SAO(树形dp)
P4099 [HEOI2013]SAO 我们设$f[u][k]$表示以拓扑序编号为$k$的点$u$,以$u$为根的子树中的元素所组成的序列方案数 蓝后我们在找一个以$v$为根的子树. 我们的任务就是在 ...
- [HEOI2013]SAO(树上dp,计数)
[HEOI2013]SAO (这写了一个晚上QAQ,可能是我太蠢了吧.) 题目说只有\(n-1\)条边,然而每个点又相互联系.说明它的结构是一个类似树的结构,但是是有向边连接的,题目问的是方案个数,那 ...
- [HEOI2013]SAO ——计数问题
题目大意: Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...
- [BZOJ3167][P4099][HEOI2013]SAO(树形DP)
题目描述 Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...
随机推荐
- 为什么游戏公司应该选择 Cloud Spanner 来支持他们的游戏?
普华永道最近的一份报告指出,全球游戏行业是过去几年经历显着增长的行业之一,到 2026 年该行业(不包括电子竞技)的价值有望达到 3210 亿美元.过去仅三年时间,该行业就增加了 5 亿玩家,全球玩家 ...
- 常见非指纹built-in函数
unescape unescape() _函数_可对通过 escape() 编码的字符串进行解码. unescape("abcdefg") 'abcdefg' unescape(& ...
- Avalonia 实现动态托盘
先下载一个gif图片,这里提供一个gif图片示例 在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn) 使用这个网站将gif切成单张图片 创建一个Avalonia MVVM的项目,将图片 ...
- jmeter性能监控
jmeter监控内存,CPU等方法 (2018-06-26 15:39:37) 转载▼ 分类: 性能测试 方法1:使用插件来监控CPU,内存等的使用情况1.需要的插件准备JMeterPlugins ...
- scroll-view滚动导航自动居中
=> 代码片段:https://developers.weixin.qq.com/s/2fE1QWmE7xFR (复制在微信开发者工具打开) <!-- enable-flex ...
- 【笔记向】RESTful api
RESTful api 是什么 源自论文:点我,中文版 Representational state transfer: Representational:数据表现形式 state:状态 transf ...
- java基础(完整版)
java javaSE 注释: block块级 line 行 标识符和关键字 组成部分.变量名.类名.方法名--------标识符 $\数字._\字母 数据类型 强类型语言---安全性高--速度会慢 ...
- JZOJ 4366. 【GDKOI2016】项链
\(\text{Problem}\) 给出一个项链,删去连续的一部分,使剩下的对称,且长度最长 \(\text{Analysis}\) 可以发现,剩下的合法项链一定是由两个回文串接起来(由对称性质可知 ...
- word、excel、pdf等多种格式在线预览
第一种方式: 具体功能说明: http://view.xdocin.com/index.html 调用案例: <a href="http://www.xdocin.com/xdoc?_ ...
- 基于Python的OpenGL 02 之着色器
1. 概述 本文基于Python语言,描述OpenGL的着色器 环境搭建以及绘制流程可参考: 基于Python的OpenGL 01 之Hello Triangle - 当时明月在曾照彩云归 - 博客园 ...