模拟5 题解

星际旅行

题中很特殊的给出,恰好2条边1次经过,m-2条边2次经过,让我有一点想到了欧拉路。

然而考试中还是没有想到拆边这个巧妙的方法,只打了一个dfs。

正解是将每条边拆为两条,问题转化为删去两条不同的边,使图中存在欧拉路

判断每个点的度即可。

在每个边拆为两条之后,每个点的度一定是偶数。

题中给出,不存在重边,存在自环。

我们分类讨论即可:

1.删去一个自环,奇偶性不发生任何改变。

2.删去一条普通边,所连的两个点奇偶性发生改变。

现在所要求的是,存在两个点度为奇数 或 所有点度均为偶数,且要保证一个边不能被删除两次。

所有的方案是:

1.删去一个点所对应的两条边

2.删去一个自环,再随便删一条边

3.删去两个自环

 

 

砍树

考场上推出来了很接近正解的式子,然后也想了一下能否使用数论分块。

但很快把自己否定了,没有继续把式子推下去。

本题给了很多部分分:

对于$k=0$,直接求gcd。

对于$k=1$,舍弃一个,求其他的gcd,尝试用gcd的约数在符合条件的情况下更新答案。

对于$k>=a_max*n-sum$,即k能至少满足选最大的,可以$O(1)$计算。

对于$a_i<5e5$,暴力枚举。

正解是数论分块,推出的式子为:

$\sum \limits_{i=1}^{n} \lceil \frac{a_i}{d} \rceil <= \lfloor \frac{k+ \sum \limits_{i=1}^{n} a_i}{d} \rfloor$

求d的最大解。

发现等号右侧的分子是定值,设为C,

由数论分块的知识我们知道右侧的取值只有$2 \sqrt{C}$个。

显然当d更大时左侧的值更小,也就更能更新答案,

于是枚举使每个定值符合的最大的d,尝试更新答案即可。

 

超级树

看到数据范围,考场上虽然想到了dp,

但无从设计状态,更别说转移。

dp状态设计的很神。

$f(i,j)$设为i-超级树,存在j条不相交于任何一点的路径的方案数。

为了方便,我们设num=f[i-1][l]*f[i-1][r]。
什么都不做:

$f[i][l+r]+=num$                                  ---1
加上仅有根的路径:

$f[i][l+r+1]+=num$                              ---2
连接左/右仅一条路径:

$f[i][l+r]+=num*(l+r)*2$                     ---3   *2的原因是双向
沟通左右:

$f[i][l+r-1]+=num*l*r*2$                    ---4
沟通左/右两条路径:

$f[i][l+r-1]+=num*(l*(l-1)+r(r-1))$      ---5   应当*2,但是与组合数的/2消掉

初始 $f[1][1]=1,f[1][0]=1$
目标 $f[n][1]$
考虑j的实际含义,j可能飙到$2^i$。
但是,根据dp转移,$f[n][1]$最多由$f[i][n-i+1]$转移。
于是我们的复杂度是 $O(n^3)$。

posted @ 2019-07-18 18:42  skyh  阅读(185)  评论(2编辑  收藏  举报