首页 > 其他分享 >多校A层冲刺 NOIP2024 模拟赛 01

多校A层冲刺 NOIP2024 模拟赛 01

时间:2024-10-03 21:26:18浏览次数:13  
标签:01 prod 公式 复杂度 多校 反演 二项式 sum NOIP2024

T1 构造字符串

签到题

注意到 \(n\) 和 \(m\) 较小,直接扫一遍用并查集维护他所描述的情况,并将不同的位置记录下来,若存在不同的位置属于同一个集合则不可能构成,否则贪心从前往后取 mex 即可。

时间复杂度 \(O(nm\alpha(n))\) 。

T2 寻宝

签到题

首先先用并查集将大联通块缩点,注意到 \(m\) 很小,可直接连边然后 \(bfs\) 判断连通性。

时间复杂度 \(O(nm\alpha(nm)+qk)\) 。

T3 序列

李超线段树

注意到对于给定 \(p\) ,最大时的左右端点 \(l,r\) 是相互独立的,可以分开单独求解

记 \(A_i=\sum_{j=1}^{i}a_i\ \ \ \ B_i=\sum_{j=1}^{i}b_i\)

即求

\(右=A_r-A_p-k(B_r-B_p)\)

\(\quad\ =\max_{r>=p}\{-B_r k+A_r\}-A_p+kB_p\)

\(左=A_p-A_l-k(B_p-B_l)\)

\(\quad\ =\max_{l<p}\{B_l k-A_l\}+A_p-kB_p\)

\(相加相消:左=\max_{l<=p-1}\{B_lk-A_l\}\ \ 右=\max_{r>=p}\{-B_rk+A_r\}\)

注意到是一次函数形式,\(k\) 不大,直接上李超线段树维护即可。

但 \(p\) 不是单调的,离线下类似扫描线,扫一遍一个一个加进去即可

T4 构树

计数题,二项式反演,树类问题,Cayley公式

前置知识:

  • 二项式反演:\(f(n)=\sum_{i=n}\binom{i}{n}g(i) ⟺ g(n)=\sum_{i=n}(-1)^{i-n}\binom{i}{n}f(i)\)

  • Cayley公式:一个完全图有 \(n^{n-2}\) 棵无根生成树。

  • 扩展Cayley公式:被确定边分为大小为 \(a_1,a_2,\cdots, a_m\) 的连通块,则有 \(n^{m-2}\prod {a_i}\) 种生成树。

  • \(shrink\_to\_fit()\):释放容器内存

题目所求即恰有 \(i(i\in[0,n-1])\) 条边属于原树边的方案数,记为 \(g(i)\)。

二项式反演套路设 \(f(i)\) 为钦定 \(i\) 条边属于原树边的方案树,\(g\) 和 \(f\) 显然满足二项式反演。

问题转移到求解 \(f(i)\)

根据扩展 Cayley公式,可以状压枚举边的情况然后直接套公式计算,时间复杂度 \(O(2^nn\alpha(n))\) 期望得分 \(65pts\)。

正解考虑公式的组合意义从而设计状态进行 \(DP\)

对于一种情况 \(ans=n^{m-2}\prod_{i=1}^{m}a_i=\frac{n^m\prod_{i=1}^{m}a_i}{n^2}\) 考虑分子的组合意义,\(n^m\) 这个东西不需要考虑直接在每个连通块中将初始值设为 \(n\) 即可求解,对于 \(\prod a_i\) 即从每个连通块中恰选一个点的方案数。

那么可以设计状态 \(dp_{i,j,0/1}\) 表示在点 \(i\) 的子树中,选择了 \(j\) 条边,点 \(i\) 所在的连通块是否已经选择一个点,树上背包转移即可。

转移方程式是朴素的,按照公式转移,注意初始值设定为 \(n\) 即可

但是本题卡空间,为了节省空间考虑状态用 \(vector\) 来存,在儿子的状态转移完成后将其 \(clear()\),然后使用 \(shrink\_to\_fit()\) 做到真正的释放内存,空间复杂度 \(O(n)\)

时间复杂度分析
\(DP\) 部分:考虑每个点被合并的次数大概是 \(\sum_{o\in tree} n-size_o\) 是 \(O(n^2)\) 级别
二项式反演部分显然是 \(O(n^2)\)
即总时间复杂度为 \(O(n^2)\)

p

标签:01,prod,公式,复杂度,多校,反演,二项式,sum,NOIP2024
From: https://www.cnblogs.com/07Qyun/p/18445966

相关文章

  • 2023-11-25 Matlab和Python在气象中的常用代码 180401
    目录画图横坐标添加月份PythonMatlab画图横坐标添加月份Pythonimportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnp#准备时间和温度数据start_date=pd.to_datetime('1996-12-01')#thenextdateend_date=pd.to_datetime('1998-12-01')#the......