P4099 [HEOI2013] SAO
P4099 [HEOI2013] SAO
题目描述
Welcome to SAO ( Strange and Abnormal Online)。这是一个 VR MMORPG, 含有 n 个关卡。但是,挑战不同关卡的顺序是一个很大的问题。
某款游戏有 \(n-1\) 个对于挑战关卡的限制,诸如第 \(i\) 个关卡必须在第 \(j\) 个关卡前挑战,或者完成了第 \(k\) 个关卡才能挑战第 \(l\) 个关卡。并且,如果不考虑限制的方向性,那么在这 \(n-1\) 个限制的情况下,任何两个关卡都存在某种程度的关联性。即,我们不能把所有关卡分成两个非空且不相交的子集,使得这两个子集之间没有任何限制。
思路
先考虑一颗外向树的拓扑序。考虑对于所有 \(n!\) 种方案,根节点必须在所有子节点前,则剩下 \(\frac{n!}{n}\) 种,然后即可分为子树上的问题,因此总方案为 \(\frac{n!}{\prod siz_i}\) 。也可以使用树形dp计算,即先不考虑根的顺序,在合并子树时考虑其在排列中占据的位置,在转移,即 \(f_u\times f_v\times \dbinom{siz_u}{siz_v}\to f_u\) ,最后再让 \(f_u/siz_u\to f_u\) 。(此处可以在组合数运算时处理根的顺序的影响,但针对于这一题,将贡献后置容易处理)。
考虑对于该题,可以使用容斥,将由儿子指向父亲的边容斥为父亲指向儿子的边和无限制。则原图就会变为许多棵外向树,对新图计数,在乘上容斥系数即可。由于转移与 \(u\) 所在的外向树大小相关,则需要在加上一维表示外向树大小。
具体的,令 \(f_{u,v}\) 表示在 \(u\) 的子树内, \(u\) 所在的连通块大小为 \(v\) 的方案书乘上容斥系数的和。
考虑转移,枚举其子树连通块的大小,按照树形dp的方式转移即可,即:
对于方向边,直接转移时乘上 \(-1\) 的容斥系数;考虑断该边时则有:
最后在每个节点转移完,需要考虑根节点在所有子节点前带来的贡献,即令 \(f_{u,i}/i\to f_{u,i}\) 。

浙公网安备 33010602011771号