20241009做题记录

[BJOI2014] 路径#

题意:给定一张无向图,每个点有一个字符 c 作为点权,={+, , ×, /, 09, (, )}

求长度为 k 的路径数量,使得路径上的字符连起来是合法的算术表达式。n20, k30

肯定是按路径长度一层一层 dp。

f(k,i,j) 表示长度为 k,最后一个点在 i,有 j 个左括号未匹配的未来可能合法路径数。

由于表达式中的数字不能有前导零,再开一维 0/1 表示能不能直接在后面接上一个数字即可(如果 i 是数字)。

submission

[雅礼集训 2019 Day5] matrix#

题意:定义一个矩阵的权值为其本质不同行的个数,两个行本质相同当且仅当他们完全相同。

给定一个 n×m 的矩阵,求其所有子矩阵的权值和,n×m105

钦定字符串 s 以及左右边界 l,r,考虑行的集合 S={i|Mi(l,r)=s}={a1,a2,, ak}

对于每一个子矩阵,行 i 产生 1 的贡献当且仅当他在这个矩阵中第一次出现(从上往下遍历)。

因此整个 S 对答案的贡献为 (aiai1)(nai+1)a0 视作 0

枚举 s,l,r 是不可取的,不妨先钦定 l=1

对每行建出 trie 树,节点 p 对应一个矩阵中出现过的左端点为 1 的字符串。

对每个节点维护集合 Sp,表示包含串 p 的行,可以在插入过程中同时维护每个 Sp 的贡献以及总贡献。

ll+1,这个操作会删掉根节点的所有儿子,并将所有孙子节点连接到根上。

启发式合并孙子节点的集合,时间复杂度 O(nmlog2(nm))

合并两颗树的复杂度:如果其中一棵为空直接返回;否则会使整张图总点数减 1,复杂度均摊线性。

submission

[雅礼集训 2019 Day7] Inverse#

题意:给定排列 {p},每次等概率挑选一个区间 [l,r] 并翻转,求 k 次后的期望逆序对数。

数据范围:n500, k50

f(k,l,r)k 轮操作后 pl>pr 的概率,那么答案即:

l=1nr=l+1nf(k,l,r)

设当前轮翻转 [L,R]

  1. (R<l)(L>r)(l<LR<r)

    f(l,r)(cl1+cnr+crl1)×f(l,r)ci=i(i+1)2

  2. LlR<r

    f(l,r)L=1lR=lr1f(R+Ll,r)L=1li=0rl1f(L+i,r)L=1ls0(L+rl1,r)L=1ls0(L1,r)s0(r1,r)s0(rl1,r)s0(l1,r)

  3. l<LrR

    f(l,r)L=l+1rR=rnf(l,L+Rr)L=l+1ri=0nrf(l,L+i)L=l+1rs1(l,L+nr)L=l+1rs1(l,L1)s1(l,n)s1(l,l+nr)s1(l,r1)+s1(l,l)

  4. Ll<rR

    f(l,r)L=1lR=rn1f(L+Rr,L+Rl)l×(nr+1)L=1li=0nrf(L+i,L+i+rl)

    g(l,r)=f(l,l+r),则:

    sumL=1li=0nrg(L+i,rl)L=1ls2(L+nr,rl)L=1ls2(L1,rl)s2(l+nr,rl)s2(nr,rl)s2(l1,rl)

时间复杂度 O(n2k)submission

[雅礼集训 2019 Day7] Subsequence#

题意:定义子序列 {ap1, ap2, , apk} 的权值为 i=1ki×api

给定数组 a,对于每个长度 1n,求出对应长度子序列的最大权值。n105

朴素 DP:fi,k 表示前 i 个数长度为 k 的子序列的最大权值,fi,kmax(fi1,k,fi1,k1+k×ai),复杂度 O(n2)

[雅礼集训 2019 Day8] union#

题意:给出 n 个点,i,jai,j 种不同的连边方式。求本质不同无向连通图个数。

gS 表示点集 S,不管他连不连通的全部方案:

gS=i<jS(ai,j+1)

fS 表示点集 S 连通的方案数。

枚举 S 所包含最小元素 x 所在连通块 T

gS=xT,TSf(T)×g(ST)

这样转移的坏处在于需要额外判断 xT,不妨设

gS={gSxS0xS

那么

gS=TSf(T)×g(ST)

写成子集卷积的形式:

g=fgf=g(g)1

这里的 g 就是对于全集而言的了。

submission


子集卷积(集合无交并)#

f=gh,满足:

fS=TSgT×hST

两个集合无交当且仅当 |S|+|T|=|ST|

Gi,S=[|S|=i]×gS

Fi,S=j+k=iTR=SGj,T×Hk,R

fS=[xSy|S|]

对每行做莫比乌斯变换:

F^i=j+k=iG^jH^k

表示对应位相乘。

枚举 i,j,将 G^iH^j 的结果加到 F^i+j 上,时间复杂度 O(n22n)

子集逆卷积#

f 在子集卷积意义下的逆元 g

fg=e

其中单位元 e 满足 ei=[i=0]

E^i=j+k=iF^jG^k

首先 E^0=F^0G^0G^0,i=F^0,i1(因为 E^0,i=1)。

E^i=F^0G^i+j>1F^jG^ij,在前 i1 行已知的情况下能够递推出 G^i(不难发现每位独立)。

[雅礼集训 2019 Day8] traffic#

题意:给定一棵以 1 为根的树,n105

对于每个节点 u,将 u 删去,并可以改变一个节点的父亲(不能是根和 u 的儿子),求最小化剩余连通块最大值。

贪心的考虑,肯定是将最大连通块 M 的某棵子树接到最小连通块上,因此答案的下界为次大连通块。

二分答案,判定最终结果是否有可能 mid

目标转化为判断 M 中是否存在一棵大小属于 [mx - mid, mid - mi] 的子树(max(mxΔ,mi+Δ)mid)。

线段树合并维护子树 size。

  • 如果 Mu 的子树,直接在 M 的线段树中查询。

  • 如果 M 为根所在连通块,做一个简单容斥:

    全局[L,R]u 的子树[L,R]fau 到根的链[L,R]+fau 到根的链[L+szu, R+szu]

注意合并子树的时刻即可。

fau 到根的信息可用树状数组在 dfs 的同时维护。submission

posted @   Lu_xZ  阅读(34)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示