传送门(内网)
解析:
简直有毒,出题人还一本正经的说:“我觉得没有去年
N
O
I
P
D
2
T
2
NOIPD2T2
NOIPD2T2难啊”
我只想说,去年 D 2 T 2 D2T2 D2T2的转移方程那里有这么鬼畜。。。
思路:
首先利用两个数组
f
,
d
p
f\text{,}dp
f,dp来进行状态转移。
定义如下
f
i
,
s
t
a
f_{i,sta}
fi,sta表示不向点
i
i
i之前的点(即
s
t
a
sta
sta中的点)回溯,当前点在
i
i
i,能够向后
D
F
S
DFS
DFS补全的集合,这个显然存在递推关系,可以
D
F
S
DFS
DFS解决。
然后就直接随便写了一个记搜。。。
d p i , s t a dp_{i,sta} dpi,sta表示当前在点 i i i,已经通过的点的集合为 s t a sta sta,继续 D F S DFS DFS的方案数。
然后直接上状态转移方程:
d
p
i
,
s
t
a
=
∑
j
d
p
j
,
s
t
a
∣
(
1
<
<
j
)
×
d
p
i
,
s
t
a
∣
f
j
,
s
t
a
dp_{i,sta}=\sum_jdp_{j,sta|(1<<j)}\times dp_{i,sta|f_{j,sta}}
dpi,sta=j∑dpj,sta∣(1<<j)×dpi,sta∣fj,sta
粗略解释一下就是,先遍历
j
j
j和回溯后遍历
i
i
i的其他子树,根据乘法原理,这种方法的贡献就是两者的乘积。