NOIP 模拟赛:2024-10-12

T1:

break 忘了写,于是 -20pts

离散化,若一个段被 3 个线段覆盖,无解;否则答案为 2cntcnt 为连通块个数。

这题卡常,要用 sort 离散化。

T2:

推式子,注意到轮数 logn 即可。

T3:

对于同色限制区间,若两个区间有包含关系,只需要保留小的。
把剩下的区间按 r 排序。
dp[i] 表示填 1i,只满足所有右端点 i 的区间的方案数。

dp[i]=dp[i1]×sno[i],其中 no[i] 表示填 1i、至少不满足一个右端点为 i 的区间、满足所有右端点 i1 的方案数。

那么,因为已经去重了,所以右端点为 i 的区间颜色互不相同。那么如果不满足了某一个右端点为 i 的区间,剩余右端点为 i 的区间一定都满足了。
因此 no[i]=j|rj=idj,其中 dj 表示填 1rj,不满足区间 j 的限制,满足所有右端点 rj1 的方案数。

接下来考虑 dj。设与 j 同色且相交的区间为 j0,j1,j2,,jk,按右端点从大到小排序。则有 dj=dp[lj1]s=1kdjs

这是为什么?首先 dp[lj1] 已经满足了所有 lj1 的区间,但是它里面包含了可能使得 j0jk 不满足的可能性(因为强制 ljrj=bj,且 dp[lj1] 可能使得 lslj1=bj)。下一步是计数 "使得 j0jk 至少一个不满足的方案数"。

注意到因为 j,j0jk 是按照右端点从大到小排序的,不包含,而且都有交集。
可以推出:ljkljk1lj0ljrjkrjk1rj0rj

强制 ljrj=bj。如果 jx 不满足,显然有 jx10 都不满足。所以 "使得 j0jk 至少一个不满足的方案数" 可以分类为 "使得 js 不满足的方案数",每一类求和。"使得 js 不满足的方案数" 就是 djs。所以 dj=dp[lj1]djs

如何计算 dj?因为区间排序后左右端点都有单调性,所以可以用一个队列 q[clr] 维护此时所有颜色为 clr 且还有用的区间。sum[clr] 表示 q[clr] 中所有区间的 d 之和。

除了区间去重,复杂度是线性的。

T4:

一种新的树的生成方式。

这个数据范围,一眼状压。考虑一颗以 u 为根的树 T 怎么生成:枚举 u 的一个儿子 vv 的子树为 T0,则可以先生成 TT0,然后生成 T0,再连接 u,v

dp[T][u] 表示使用 T 内的点构建一颗以 u 为根的生成树,最小的代价是多少。
转移则枚举 T0,v(显然应该有 vT0),然后 dp[T][u]dp[TT0][u]+dp[T0][v]+dis(u,v)×|T0|×(n|T0|).

这是 O(3nn2) 的。考虑优化。

注意到当固定了 u,T0 时,dp[T0][v]+dis(u,v)×|T0|×(n|T0|) 只与 v 有关。考虑计算辅助数组 p[T0][u]=minvT0{dp[T0][v]+dis(u,v)×|T0|×(n|T|)}。这可以在求出每个 dp[S][i] 时,枚举 j 更新 p[S][j]。复杂度 O(2nn2)

于是 dp[T][u]=minT0T{dp[TT0][u]+p[T0][u]},复杂度 O(3nn)

posted @   FLY_lai  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示