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

多校 A 层冲刺 NOIP2024 模拟赛 05

时间:2024-10-11 17:03:04浏览次数:1  
标签:背包 重心 05 复杂度 多校 tot sos NOIP2024 size

多校A层冲刺NOIP2024模拟赛05

T1 好数(number)

签到题

首先 \(O(nV)\) 的背包暴力是显然的,注意到本题只需要合法性,状态只有 \(0/1\),上 \(bitset\) 优化转移即可。

时间复杂度 \(O(\frac{nV}{w})\)。

T2 SOS字符串(sos)

签到题

计数题难点在不重不漏,而本题则主要是不重。

考虑一种好的计算 sos 贡献的方式,即可以钦定第一次出现时才会产生贡献( sosos 只计算最左边 \(3\) 个贡献)。

上组合数学显然很麻烦,会分讨很多东西,考虑 \(DP\)。

设计状态 \(f_{i,j,k}\) 表示前 \(i\) 个,已经有 \(j\) 个 sos,结尾情况为 k 时的方案数。由于只有大于等于 \(3\) 个 sos 才有贡献,所以将大于等于 \(3\) 个 sos 压缩到一维(算是一个小 trick )。

结尾情况钦定好情况,转移大力分讨乘上系数就好了。

时间复杂度呈线性。

可以矩乘优化变为 \(O(wlogn)\),其中 \(w\) 为一次矩乘的复杂度。

T3 集训营的气球(balloon)

计数题,DP,背包,退背包

注意到 \(c\) 很小,是解题的关键点,考虑容斥去计算恰有 \(1~c-1\) 的方案数,答案即为总方案数减去上述方案总数。

这显然是一个背包问题,直接做一次的复杂度是 \(O(nc)\),加上询问复杂度就爆炸了。

注意到本题背包的性质,显然转移顺序是没有任何影响的,并且转移具有可逆性

并且本题是单点修改,所以可以使用退背包。具体的直接逆向减去原点的影响,再重新加入新点的影响。

时间复杂为 \(O(q(c+log))\),多个 \(log\) 是由于会计算逆元。

T4 连通子树与树的重心(tree)

计数题,DP,树的重心,退背包

不要用题目描述重心的定义去做本题,即使此最大值取到最小的节点被称为整个树的重心,而是考虑更数学的定义,即以树的重心为根时,所有子树的大小都不超过整棵树大小的一半 (size/2)

首先正常求出重心,对重心个数进行分讨:

若为 \(2\) 个,显然将重心相连的边删去后两个以重心为根的树的 \(size\) 是相等的,直接树上背包分别求出这两个点所在连通块且不包含对方所有 \(size\) 的方案数,答案即为 \(\prod_{i=1}^{n}size_{rt_1,i}size_{rt_2,i}\)。
时间复杂度瓶颈在树上背包为 \(O(n^2)\)。

若为 \(1\) 个,考虑重心的定义所有子树的大小都不超过整棵树大小的一半,并且只有一个重心,记一个点所在连通块总大小为 \(tot\),限制变为所有子树的大小都不超过 (tot-1)/2,证明考虑当有两个重心的时候 \(tot\) 必定为偶数。这个限制能使用背包解决,具体的记 \(f_{i,j}\) 表示 \(i\) 所在连通块且不包含其父亲时大小为 \(j\) 时的方案数,求出 \(f\) 数组,然后外层枚举重心所在连通块 \(tot\) 的大小,内层枚举重心儿子将上界设置为 \((tot-1)/2\) 再用一个新的数组再跑一遍背包就行。
这样就得到一个 \(O(n^3)\) 的做法,期望得分 50 pts。
考虑容斥优化,同 T3,即计算总方案数减去不合法方案数。注意到一个方案不合法当且仅当子树中存在一个 \(size\) 大于限制,而由于限制是 \((tot-1)/2\) 不满足这个限制的子树只会有一个,考虑枚举不合法子树即可,不合法方案即为
\(\sum_{v\in son_{rt}}\sum_{tot=1}^{n}\sum_{j=(tot-1)/2+1}^{min(size_v,i)}f_{v,j}\ g_{rt,tot-j}\)
其中 \(g\) 是去除去了点 \(v\) 影响对应的 \(f\),同 T3 一样可以退背包求解 \(g\) 数组。这一部分的时间复杂度即为上述式子,复杂即为 \(O(n^2)\)。

总时间复杂度为 \(O(n^2)\)

p

标签:背包,重心,05,复杂度,多校,tot,sos,NOIP2024,size
From: https://www.cnblogs.com/07Qyun/p/18458549

相关文章

  • ETA6005Q3Q 2.5A带动态路径管理的单节锂电开关型充电器
    2.5A带动态路径管理的单节锂电开关型充电器  ETA6005是一款充电电流达2.5A的单节锂电开关型充电。其集成了动态路径管理功能,内部路径的开关内阻仅50mohm,允许系统在没有电池的情况下,仍然可以在适配器存在是维持系统正常工作。ETA6005有特有的2级充电设定可通过引脚的0,1来设......
  • 学习011-08-05 Boolean Properties(布尔属性)
    BooleanProperties(布尔属性)InXAF,thefollowingcontrolscandisplayBooleanandNullableBooleanproperties:在XAF中,以下控件可以显示布尔和Nullable布尔属性:Acheckboxcontrol(default).复选框控件(默认)。Adrop-downcontrolthatdisplaysBooleanvaluesa......
  • PAT甲级1005 Spell It Right
    介绍Givenanon-negativeintegerN,yourtaskistocomputethesumofallthedigitsofN,andoutputeverydigitofthesuminEnglish.InputSpecification:Eachinputfilecontainsonetestcase.EachcaseoccupiesonelinewhichcontainsanN(≤10的1......
  • 2023杭电多校4
    2023杭电多校4a-bProblem题目大意:每个物品都有a,ba,ba,b两个值,......
  • 10.10日noip多校联考总结
    10.10日noip多校联考总结T1感觉就是个dij再多记录一个换乘次数然后就像普通dij一样跑就行了。但是必须得将换乘次数放进dis数组中当成一个状态记录下来,不能只记录在堆中,不然做法会假。T2发现m=0的部分分就是用一个数据结构维护区间最大子段和。m=1/2就是同时维护一个最大值......
  • [AGC054D] (ox) 题解
    感觉看到交换就应该要想到逆序对。思路一个前置小知识,我们把一个排列用相邻交换复原的最小次数是逆序对数量。考虑没有ox的情况。我们顺着扫一遍字符串。把左括号正一,右括号看作负一,当前缀和小于零以后,我们把后面最近的左括号提过来,这样可以构造出交换次数最少的合法括号串......
  • 2024牛客暑假多校第三场 - A. Bridging the Gap 2
    思路全在注释里了:#include<cstdio>#include<cmath>#include<algorithm>usingnamespacestd;constintN=5e5+5;intn,l,r,a[N];boolSolve(){ //打工次数:一个人能将其他人运过去的次数=一个人能过去以后能往返的次数 scanf("%d%d%d",&n,&l,&r); intmin_go=c......
  • 20222305 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    网络攻防实验报告姓名:田青学号:20222305实验日期:2024/09/29—2024/10/09实验名称:缓冲区溢出和shellcode指导教师:王志强1.实验内容本周学习内容总结:学习了系统安全(缓冲区溢出是重点)主要内容:漏洞简介:定义以及安全漏洞。BOF(缓冲区溢出):直接原因-没有严格的内存越界检查......
  • [赛记] 多校A层冲刺NOIP2024模拟赛04
    这场ACCODERS忘交,结果最后想起来匆匆只交了T1,然后文件名还没改,所以爆零了。。。02表示法100pts高精度,不说了;点击查看代码#include<iostream>#include<cstdio>#include<string>#include<cmath>#include<algorithm>usingnamespacestd;stringp[605];stringan......
  • 2024.9.25 多校 模拟赛
    模拟赛假做法上大分。T1几何bitset优化dp。有空学,先挂个暴力。code#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+5;intT,n,m,t;chars[N],x[55],y[55];unordered_map<int,unordered_map<int,bool>>f[N];unordered_map<int,unordered_map<i......