Examples

2023-4-21 #50 乐园中她仍旧唱着 糅合泪水与苦痛编织的诗歌

——Evalia《樂園》

最近做的题是不是太难了,感觉自己啥都不会了。

海伊太可爱了!!!小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡小水母(:≡

浅滩 樂園 远溯 黑花鸢尾之歌

299 P9197 [JOI Open 2016] 摩天大楼

连续段 dp 经典题。

考虑将高度排列在二维平面上,相邻高度连边,我们即统计每一个高度有多少条线段经过。

从下到上 dp,记录连续段数量,目前的总和,考虑如何加入一个端点:

  • 新建一个谷的顶点,方案数是插入方案数,注意钦定最左侧与最右侧端点的新建;
  • 延伸某个连续段,注意这里也可以钦定出最左侧最右侧的端点;
  • 合并任意两个连续段。

复杂度 O(n2L)

300 CF868G El Toll Caves

策略肯定是从前往后一遍遍扫,可以发现其模 gcd(n,k) 等价,可以同除 gcd(n,k),那么 n,k 互素。

考虑令 fi 为宝藏在洞穴 ii0 开始),找到它的期望天数,那么:

  • 对于 ik,找到其之前一定会访问 ik 号洞穴,因此 fi=fik+1(因为可以看作这个位置往前移了 k 个单位)。
  • 对于 i<k,我们还需考虑第一次就找到,因此 fi=12+12(fik+n+1)

可以以 f0 为主元表示出所有数(这依赖于 n,k 互素),然后列出关于 f0 的方程解出其。

每次 +k,n 的形式提示我们使用万能欧几里得,将遍历看作一条斜率为 kn 的直线,x 每加一相当于 f 值加一,y 每加一相当于 f 值除二,可以类似地维护出 f 的总和。

复杂度 O(Tlogn)

301 CFgym102268D Dates

这题很像刚做过的 CFgym102220A Apple Business,按照 p 从大到小排序,只需考虑快速计算在不改变之前使用量的情况下这个人可以使用次数的最大值。

使用 Hall 定理,对于每个时间区间都要满足其 a 之和不小于其包含的区间的次数和。由题中限制 lili+1,riri+1 可知只需检查所有 xy 对应的 [lx,ry] 区间。

sarysalx1sfysfx1(saa 的前缀和,sf 为使用次数的前缀和),移项后可用区间加,区间最值的线段树维护,复杂度 O(nlogn)

302 CFgym102268G Graph Counting

Tutte-Berge 公式指出:α(G)=ndef(G)2,其中 α(n) 为最大匹配数,def(G) 为图 G 的亏损,其值为对于所有子集 S,去掉其后大小为奇数的连通块数量减去 |S| 的最大值。

加一条边最大匹配大小至多加一,因此原图最大匹配数量为 n1,亏损为 2,考察亏损为 2 的任意子集 U,若能在这个子集上加上一条边,其

对不起,不会证!

于是我们得到结论:这张图满足有 x 个点与其他所有点均有连边,剩下的部分是 x+2 个大小为奇数的团。

那么就是算将 2nx 拆分成 x+2 个奇数的方案数,变换一下变成 n+1 拆分成 x+2 个正整数的方案数,求和就是将 n+1 拆分成至少两个正整数的方案数,答案即为分拆数减一。

分拆数直接 O(nn) 随便求一下就好了。

303 CFgym102538A Airplane Cliques

谔谔。

一个方案合法当且仅当存在一个点/边中点与所有点距离不超过 x2,每个边中间加一个点就只需考虑点。

考虑一个方案能计数到的点一定是一个连通块,根据树上连通块统计技巧,只需统计一个方案对应点数量减去对应边数量。

ci 为距离点 i 不超过限制的点数量(点分治容易统计),我们即求 (cik),这是一个差卷积(边的处理是类似的)。

复杂度 O(nlog2n)

304 CFgym102538G Giant Penguin

k=0 时是经典的点分树问题,k 较大的时候我们只需改进一下选择的 separator,将分治中心 u 内所有跨越子树的边同样纳入 separator 即可,复杂度 O(nklogn)(破题水)。

305 CFgym102538H Horrible Cycles

咋不会呢。

将每个左部点挂在对应右部点上,并从左往右扫,于是我们可以使每个左部点之前加入右部点的与其均有连边,每个右部点之前加入的左部点与其均无连边。

于是设出 dp,令 fi,j 表示前 i 个点形成 j 条链的方案数,加右部点可以添加路径,加左部点可以合并两条路径。

复杂度 O(n2)

306 uoj#309. 【UNR #2】排兵布阵

之前口胡忘记记录了。

x 加 y 和提示我们使用根号算法。

将点看作行列的一条边,根据三元环计数那一套工具,我们不妨给边定向为度数小连向度数大。

可知每个点的出边数量不超过 On(分度数小于根号与大于根号讨论),于是我们的想法就是每次操作暴力操作出边,入边打标记。

那么除了平移外的操作都很容易处理,合并有一些细节:

  • 合并时不能直接下传标记,需要用一个权值并查集记录与父亲标记差;
  • 合并后要检查自己 O(n) 个关键点的变动;
  • 需要对关键点去重,我们不妨在关键点集合大小大于 2n 时对关键点去重,这样一次检查至少去掉 n 个重复点,复杂度少了一个瓶颈。

复杂度 O(nn)(假设 n,q 同阶)。

posted @   xiaoziyao  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示