首先看看选手的表现 :
由于是 oj 上的比赛,所以我就不写暴力的做法了
A change
首先你需要知道你要求的答案是图上最小生成树的边权之和再加一
你还要知道这张图是需要加边和删边的
可持久化 LCT
动态最小生成树应该都会写,如果不会的可以先去做 NOI 的魔法森林
其实可以线段树分治,Luogu 举办了这么多比赛,应该有考过
线段树分治就是说你把所有的边,按照它存在的时间丢到线段树上面,这样一条边就最多会被丢到线段树的 log 个区间上,这样你就发现 LCT 只需要支持加边,至于删边的话,可以直接逆序暴力删
然后你就做完了
小事故 : 由于使用随机数据,所以第二部分不需要 LCT 暴力也可以跑过去,看你们的自觉性了…
时间复杂度 : $O(N\log^2N)$
B path
首先你需要知道你要求的答案是图上有多少个点,满足删除这个点之后 $u, v$ 不连通 ($u, v$ 是询问的两个端点)
你就会发现满足条件的点都是割点
再想到 Tarjan 算法
然后就不会了
然后你就会想起有一种叫做圆方树的东西 (其实就是用一个方点代表一个点双联通分量,这个方点向所有点双上的圆点连边)
最后你发现答案就是 $u, v$路径上圆点的数量
做完了
C gemo
这个就是比赛说明里面的那个改个题面变正解的题目
原题 Pkuwc2018 day2 T3
首先你会发现这个题目需要求期望,还要取模,所以肯定不可做
首先你需要看到题目说明里面最坏情况就是走过所有关键点至少一次
分层图高斯消元
我们设 $f[i][S]$表示到达节点 $i$,已经经过了集合 $S$内的关键点的期望,那么显然有
$$f[i][S] = \frac{1}{d_i}\sum_{(i, j)\in E}f[j][S’]+1$$
我们可以发现上面的转移方程式 $S$一定是 $S’$的子集,所以我们可以对 $S’$分层高斯消元
我们可以首先将所有点全部标记为关键点,做一次高斯消元
那么每一次询问相当于有一部分节点不是关键点,我们就认为那么节点已经经过了,
我们发现答案就是 $f[s][S’]$,其中 $S’$为关键点的补集
预处理时间复杂度:$O(2^NN^3)$,询问 $O(1)$
max-min 容斥
首先你需要知道什么是 max-min 容斥
$$max{S}=\sum_{S’\subset S}(-1)^{|S’|-1}min{S’}$$
然后要求的就从起点到达所有关键点的中最晚到达的点的时间期望,变成了到达集合中所有点最早到达的时间
期望
那么现在的问题就变成了给出一个集合,求从 $s$出发到达其中一个点的期望,高斯消元即可
这个过程是 $O(2^NN^3)$的
剩下的就是要合并所有的集合
我会枚举子集
FWTDP 即可
时间复杂度是 $O(2^NN^3+2^NN^2+M)$
9 条评论
tianbu · 2018年3月3日 3:31 下午
%%%dalao
kimi0503 · 2018年3月3日 10:55 上午
这个 T3 我觉得最坏情况不是走过所有关键点至少一次吧?考虑一张图,1 向 2,3 各有一条边,则 1 走到 2 或 3 的期望步数均为 3,但从 1 出发经过 2,3 至少一次的期望步数却是 5.5!=max(3,3). 不如直接在题面里明确一下题意,或者放组更强的样例。
kimi0503 · 2018年3月3日 10:56 上午
那个 “5.5” 中间是句号,不是小数点。
Cai · 2018年3月3日 11:57 上午
我不是在说明里面写了吗??
比赛的时候就有人问过我..
kimi0503 · 2018年3月3日 2:03 下午
我错了,抱歉。
caiji · 2018年3月2日 11:36 下午
orz
菜鸡yww · 2018年3月2日 9:15 下午
菜鸡yww · 2018年3月2日 9:14 下午
菜鸡yww · 2018年3月2日 9:14 下午
markdown 测试:
$\sqrt 2$