9.6 CF1830 题解

9.6 CF1830 题解

A. Copil Copac Draws Trees

链接

真弱智题不用讲

B. The BOSS Can Count Pairs

题意

每组数据给你一个 n 和两个序列 a,b

求有多少个数对 (i,j) 满足 1i<jnai×aj=bi+bj

题解

考虑 ai×aj=bi+bj,那么 ai×aj2nmin(ai,aj)2n

枚举 x 表示两个a中小的那个,从 12n

把所有满足 ai=xbi 放在桶里,然后在桶里找 ai×xbi 个数。

复杂度 O(nn)

C. Hyperregular Bracket Strings

题意

给定 k 个区间,求有多少种长度为 n合法括号序列,满足每个区间也是合法括号序列

题解

考虑两个相交的区间,可以分成三个区间,三个区间都满足是合法括号序列。

黑色是原本的,黄色是现在的。

考虑两个相包含的区间,被包含的区间是一部分,剩余部分是一部分。

红色部分要满足合法,黄色部分拼起来也要满足合法。

我们有一堆相交,相包含的区间交替出现,如果你要真的分割区间会是一个我不会的分讨。

我们考虑给每一个区间赋权值,相交部分的权值就异或起来。

在上面两种情况中权值异或后权值每一部分都不相同。

我们想要的是每一种区间的长度然后求卡特兰数,也就是每一种区间也就是每一个异或值对应的个数。

区间赋异或权值可以考虑差分序列,两端点赋了之后再前缀异或和得到原序列。

D. lMex Tree

题意

给定一棵 n 个结点的树,点有点权,点权为 0 或 1。你需要给一种指定点权的方案,使得每一条路径的点权 mex 之和最大。

题解

考虑最优解是大多路径都是 2,少部分是 1或者 0。

那么我们记录距离所有路径都是 2 的情况缺失多少,我们要让缺失值最小。

fu,0/1,i 表示以 u 为根的子树,u0/1u 子树和 u 值相同的联通块大小为 i

f 初始值就是 fu,0,1=1,fu,1,1=2

本身到本身有贡献。

转移方程就是

fu,0,j=min(fu,0,j+mink=1siz[v]fv,1,k,mink=1siz[v](fu,0,jk+fv,0,k+(jk)×k)fu,1,j=min(fu,1,j+mink=1siz[v]fv,0,k,mink=1siz[v](fu,1,jk+fv,1,k+2×(jk)×k)

这样是 O(n2) 的,我们怎么优化呢?

优化

我们考虑设每个子树大小为 siz ,最优情况联通块大小不超过 2n

因为我们可以发现一种比较优秀的情况是黑白染色,这时候缺失值最多为 2n

当联通块大小为 x 时,缺失值最少是 x2 ,当联通块大小 2n 时候一定不够优秀。

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