P6651
题目描述
给定
,求出如果去掉这
-
“链”的定义是:我们设一条长度为
p 的链的路径为w_0\to w_1\to\cdots\to w_{p-1}\to w_p ,则应满足w_0 入度为0 ,w_p 出度为0 。你可以将其理解为一条食物链。 -
两条链是“不同的”,当且仅当它们的长度不同,或者经过的点集不同。
-
需要特别注意的是,删去某些点后新产生的链不计入答案。 例如
1\to 2\to 3\to 4 一图中,有1 条链1\to 2\to 3\to 4 。如果去掉2 号点,则剩余0 条链。
数据范围
- Subtask 1(1 point):给定的图是一条链。
- Subtask 2(14 points):
n,q\leq 10 。 - Subtask 3(20 points):
q\leq 10^3 。 - Subtask 4(17 points):
k=1 。 - Subtask 5(18 points):
k=2 。 - Subtask 6(30 points):无特殊限制。
对于
所有询问满足:
题目分析
Subtask1
很明显,如果
Subtask2-3
标记删掉的点,暴力去跑图。
设
时间复杂度
Subtask4
\begin{matrix} i & 1 & 2 & 3 & 4 & 5 & 6 & 7\ f_i & 1 & 2 & 1 & 6 & 13 & 4 & 1 \end{matrix}
\begin{matrix} i & 1 & 2 & 3 & 4 & 5 & 6 & 7\ n!f_i & 3 & 3 & 13 & 1 & 1 & 2 & 4 \end{matrix}
\begin{matrix} i & 1 & 2 & 3 & 4 & 5 & 6 & 7\ f_i & 1 & 2 & 1 & 6 & 13 & 4 & 1\ n!f_i & 3 & 3 & 13 & 1 & 1 & 2 & 4\ ans_i & 10 & 7 & 0 & 7 & 0 & 5 & 9 \end{matrix}
对于
设
可以发现一个性质:若 显然成立。
- 如果
d_{i,j}=d_{j,i}=0 ,代表i,j 到出度为0 的点的路径不相交,直接用ans=s-f_i\times n\!f_i-f_j\times n\!f_j 计算即可。 - 如果
d_{i,j}\ne 0 ,代表i,j 到出度为0 的点的路径中i 包含j ,重复路径就是f_i\times d_{i,j}\times n\!f_j ,用ans=s-f_i\times n\!f_i - (f_j - f_i \times d_{i,j})\times n\!f_j 计算即可。 - 如果
d_{j,i}\ne 0 。用ans=s-f_i\times (n\!f_i - f_j \times d_{j,i})- f_j\times n\!f_j 计算即可,同上。
所以,总计算式为:
到此,思路已经全部出来了,将
这个可以通过预处理拓扑序避免每次询问再跑一遍拓扑,即根据拓扑序排序后进行容斥。