题目
别问我 P E 690 \rm PE690 PE690 是什么意思,我也不知道。题目名呢?我自己取的。
题目描述
T
o
m
Tom
Tom 和
J
e
r
r
y
Jerry
Jerry 在玩躲猫猫游戏。具体的,迷宫可以看成是
n
n
n 个点的无向图,每天早上
T
o
m
Tom
Tom 可以查看某个点,并且如果
J
e
r
r
y
Jerry
Jerry 碰巧在这个点上,那么
T
o
m
Tom
Tom 就赢了。每天晚上
J
e
r
r
y
Jerry
Jerry 必须走到相邻的一个点上。
求有多少种本质不同的简单无向图使得 J e r r y Jerry Jerry 无论采用什么策略(即,对于所有的移动路线), T o m Tom Tom 都可以在有限步内必胜。两个无向图本质不同当且仅当不能通过重标号使得它们完全相同。
数据范围与提示
n
≤
1
0
5
n\le 10^5
n≤105 ,答案对
998244353
998244353
998244353 取模。提示:无论
J
e
r
r
y
Jerry
Jerry 是否知晓
T
o
m
Tom
Tom 的操作,答案都是那个数。
思路
如果图有环,必然抓不到 J e r r y Jerry Jerry 。直观上容易理解,不妨再给出一个数学的证明。对于第一天早上, T o m Tom Tom 的查看可以排除 J e r r y Jerry Jerry 在某个点的可能,但是第二天早上 J e r r y Jerry Jerry 仍然可能在任意一个点出现。
对于图是一个森林的情况,可以单独考虑每棵树。如果以某一个点为根时,有三个子树的大小超过
2
2
2,铁定凉凉。证明与上面的类似,对于这样一张图,
a
3
−
a
2
−
a
1
−
y
−
b
1
−
b
2
−
b
3
∣
c
1
∣
c
2
∣
c
3
a_3-a_2-a_1-y-b_1-b_2-b_3\\ |\\ c_1\\ |\\ c_2\\ |\\ c_3
a3−a2−a1−y−b1−b2−b3∣c1∣c2∣c3
不妨手玩一下各种选择。用
A
i
A_i
Ai 集合表示,第
i
i
i 天
J
e
r
r
y
Jerry
Jerry 移动后不可能在的地方。第一天,必须询问
a
2
,
b
2
a_2,b_2
a2,b2 或
c
2
c_2
c2,否则起不到任何效果。不妨设询问了
a
2
a_2
a2 则
A
1
=
{
a
3
}
A_1=\{a_3\}
A1={a3}
此时去操作
b
,
c
b,c
b,c 的话,第一天的努力就白费了。必须操作
a
1
a_1
a1,乘胜追击!于是
A
2
=
{
a
2
}
A_2=\{a_2\}
A2={a2}
只有操作
y
y
y 是有意义的。故
A
3
=
{
a
3
,
a
1
}
A_3=\{a_3,a_1\}
A3={a3,a1}
如果此时操作 a 2 a_2 a2 那么 A = { a 3 , a 2 } A=\{a_3,a_2\} A={a3,a2} 只需要两次不操作就会被蚕食干净。而 b b b 或 c c c 要操作三次(同上方 a a a 的操作)才能与 a a a 碰面,那时候 a a a 早就火化了。所以只能选择询问 b 2 b_2 b2 或 c 2 c_2 c2 另辟蹊径。然而同样的,目前的 A 3 = { a 3 , a 1 } A_3=\{a_3,a_1\} A3={a3,a1} 只需要两步就凉凉了,如何等来救兵?
如果上面的条件不成立,考虑求出树的直径 a 1 − a 2 − ⋯ − b 2 − b 1 a_1-a_2-\cdots-b_2-b_1 a1−a2−⋯−b2−b1(设其长度至少为 4 4 4)。显然 a 1 , b 1 a_1,b_1 a1,b1 度数均为 1 1 1,而 a 2 , b 2 a_2,b_2 a2,b2 只能连着叶子。其他的点,最多连接一些高度为 2 2 2 的子树。
不妨设 a 1 a_1 a1 为树根。将图黑白染色。此时 J e r r y Jerry Jerry 每天会从一种颜色的点走到另一种颜色的点。我们采用这种策略:当我们确信 J e r r y Jerry Jerry 在 x x x 的子树中,且 J e r r y Jerry Jerry 所在点与 x x x 颜色相同时,将 x x x 号点与它的子节点(不包括直径上的下一个点)穿插询问,即依次询问 x , s o n 1 , x , s o n 2 , x , s o n 3 , … , x , s o n k x x,son_1,x,son_2,x,son_3,\dots,x,son_{k_x} x,son1,x,son2,x,son3,…,x,sonkx 。
这样做的正确性是显然的。如果 J e r r y Jerry Jerry 藏在 s o n t son_t sont 代表的子树中,那么他没办法跑出去(查询 x x x 是恰到好处的封口)。而查询 s o n t son_t sont 时,根据节点颜色, J e r r y Jerry Jerry 只能在 s o n t son_t sont 处被抓住!如果 J e r r y Jerry Jerry 在更深的地方(顺着直径往下走),他也跑不出来,我们就可以递归向下查询了。
然而一开始我们不知道 J e r r y Jerry Jerry 所在节点的颜色。不要紧!我们假设 J e r r y Jerry Jerry 所在节点的颜色与根节点颜色相同,如果没抓住他,只有可能是 J e r r y Jerry Jerry 一开始所在节点的颜色不是根节点的颜色。那么我们可以推算出他现在所在节点的颜色,从头再来一遍,必定行。
如果树的直径长度为 3 3 3 呢?更简单——这就是个菊花图。直接询问中心两遍就行。如果树的直径为 2 2 2,整个树就只有这两个点……不过还是可以当成菊花图来处理。
讲了这么多,我们只知道了怎么判断一个给定图是否合法。虽说接下来也只剩一点点了。直接用 生成函数 推个数。对于中间的点,与它连接的子树高度不超过
2
2
2 ,可以看成整数拆分。所以生成函数
m
i
d
mid
mid 为
M
(
x
)
=
∑
i
=
1
+
∞
p
i
−
1
x
i
M(x)=\sum_{i=1}^{+\infty}p_{i-1}x^{i}
M(x)=i=1∑+∞pi−1xi
其中
p
i
p_i
pi 是将
i
i
i 拆分成无序的正整数的方案数。对于两边的点(设直径是
a
1
−
a
2
−
a
3
⋯
−
b
2
−
b
1
a_1-a_2-a_3\cdots-b_2-b_1
a1−a2−a3⋯−b2−b1),我们把
a
1
,
a
2
a_1,a_2
a1,a2 都当做
a
3
a_3
a3 的子节点,那么
a
3
a_3
a3 就是一个树高恰好为
2
2
2 的情况。所以它的生成函数
e
n
d
p
o
i
n
t
end\;point
endpoint 为
E
(
x
)
=
∑
i
=
1
+
∞
(
p
i
−
1
−
1
)
x
i
=
M
(
x
)
−
x
1
−
x
E(x)=\sum_{i=1}^{+\infty}(p_{i-1}-1)x^i=M(x)-\frac{x}{1-x}
E(x)=i=1∑+∞(pi−1−1)xi=M(x)−1−xx
即,减去了树高恰好为
1
1
1 的情况。直径长度不定,所有的
M
M
M 的卷积的生成函数
F
(
x
)
=
∑
i
=
0
+
∞
M
(
x
)
i
=
1
1
−
M
(
x
)
F(x)=\sum_{i=0}^{+\infty}M(x)^i=\frac{1}{1-M(x)}
F(x)=i=0∑+∞M(x)i=1−M(x)1
那么两个
E
E
E 与一个
F
F
F 的卷积就是答案了……吗?还要考虑是否同构。显然同构只有一种情形,就是沿着链翻转。如果长度是偶数,那么确定一半就是方案数。如果长度是奇数,就要确定一半再乘一个中间点任选。所以答案的生成函数
B
(
x
)
=
1
2
[
E
(
x
)
2
F
(
x
)
+
E
(
x
2
)
F
(
x
2
)
(
M
(
x
)
+
1
)
]
B(x)=\frac{1}{2}\Big[E(x)^2F(x)+E(x^2)F(x^2)(M(x)+1)\Big]
B(x)=21[E(x)2F(x)+E(x2)F(x2)(M(x)+1)]
可惜这是直径长度至少为 6 6 6 的情况。如果直径长度不超过 5 5 5,可以假想直径上一个点当根,高度不超过 2 2 2 嘛,直接用 M ( x ) M(x) M(x) 减去同构情况。直径为 5 5 5 或 4 4 4 不会同构,直径为 3 3 3 的选择中心与选择端点各计算了一次,需要减掉。不妨减去中心当根的情况,这是高度恰好为 1 1 1 且至少有两个儿子的情况,生成函数是 ∑ i = 3 + ∞ x i = x 3 1 − x \sum_{i=3}^{+\infty}x^i=\frac{x^3}{1-x} ∑i=3+∞xi=1−xx3 。直径为 2 2 2 的也多算了,这是仅有一条边的情况,生成函数是 x 2 x^2 x2 。
所以最终一棵树的生成函数
T
(
x
)
=
B
(
x
)
+
M
(
x
)
−
x
3
1
−
x
−
x
2
T(x)=B(x)+M(x)-\frac{x^3}{1-x}-x^2
T(x)=B(x)+M(x)−1−xx3−x2
森林的生成函数是什么呢?不妨记
G
(
x
)
G(x)
G(x) 为
T
(
x
)
T(x)
T(x) 的指数型生成函数,森林的指数型生成函数为
H
(
x
)
H(x)
H(x),显然会有
H
(
x
)
=
∑
i
=
0
+
∞
G
(
x
)
i
i
!
=
e
G
(
x
)
H(x)=\sum_{i=0}^{+\infty}\frac{G(x)^i}{i!}=e^{G(x)}
H(x)=i=0∑+∞i!G(x)i=eG(x)
所以作一个 e x p exp exp 就好了。时间复杂度 O ( n log n ) \mathcal O(n\log n) O(nlogn) 。