G 就是个最小割板子,但是打比赛时一直以为求最小割方案就是把流满的边当作割边,机房里几个人还同时犯了这个错误,错误的点的数量一样,当时一致认为数据有问题,事实上需要从源点开始跑广搜,找出源点不经过流量为 0 0 0的边所能到达的所有的点记为 S S S集,其余点记为 T T T集,如果有一条边上的两个点所在集合不一样,那这条边就是割边
F 关键是怎么设状态,一开始设
f
(
x
)
f(x)
f(x)表示当前数为
x
x
x,期望经过几次操作大于
m
m
m,怎么推都只能推出一个暴力
d
p
dp
dp,事实上如果把状态设为
f
(
x
)
f(x)
f(x)表示从
1
1
1点期望经过几次操作可以大于等于
x
x
x,可以得到
f
(
x
)
=
1
n
∑
i
=
1
n
f
(
⌈
x
i
⌉
)
+
1
f(x)=\frac{1}{n}\sum_{i=1}^nf(\lceil\frac{x}{i}\rceil)+1
f(x)=n1i=1∑nf(⌈ix⌉)+1
f
(
x
)
=
∑
i
=
1
n
f
(
⌈
x
i
⌉
)
+
n
n
−
1
f(x)=\frac{\sum_{i=1}^nf(\lceil\frac{x}{i}\rceil)+n}{n-1}
f(x)=n−1∑i=1nf(⌈ix⌉)+n
然后直接递归记忆化就可以做到
O
(
n
3
4
)
O(n^\frac{3}{4})
O(n43)的时间复杂度,具体证明可以参照杜教筛的证明,提前预处理前
n
2
3
n^\frac{2}{3}
n32的
f
f
f值,时间复杂度就可以做到
O
(
n
2
3
)
O(n^\frac{2}{3})
O(n32)