2024.2 记录

2.11

ARC171E. Rookhopper's Tour

todo。

2.14

NFLS 模拟. 发讲义

原题:UR #7. 水题走四方。

2.15

NFLS 模拟. 达拉然的废墟

题意:T 次询问,每次给定正整数 n,k,定义一个长为 2n 的排列 p 是好的,当且仅当 p2<p4<<p2n。定义一个方案是将一个好的排列 p 划分成长度为偶数的 k 段子区间的方式。等概率随机选择一个方案,求方案中所有划分出来的子区间的逆序对个数之积的期望。

n,k500T104

总方案数是好算的,所以考虑算所有方案的逆序对个数之积的和。这相当于是要在每段内选择一对形成逆序对的位置,问先选择一个方案,再选择这些逆序对的方案数。

一个逆序对只有三种情况:

  • 两个下标为奇数的位置,由于将这两个位置交换仍然能得到一个好的排列,所以这种情况的贡献系数是 12
  • 一个下标为偶数的位置和一个下标为奇数的位置,此时需要奇数位置的值小于偶数位置的值;
  • 一个下标为奇数的位置和一个下标为偶数的位置,将它容斥成不限制这两个位置的大小关系,减去奇数位置的值小于偶数位置的值。

考虑按这样一个策略来确定整个排列:以某种顺序考虑所有下标,如果现在考虑了下标 i1,i2,,ik,那么只确定 pi1,pi2,,pik 的相对大小关系,考虑下一个下标的时候将它的值插入到这个大小关系里。

假如已经知道了所有逆序对的位置,那么已经确定的大小关系形如一条长为 n 的有向链,链上有一些点下面挂了一个连向它的点。如果这个有向图的总大小是 s,那么不在这个有向图上的位置可以任意插入,方案数是 (2n)!s!

考虑按照挂的位置从小到大确定那些挂在链下面的点的大小关系。假如有一个点挂在第 j 个偶数位置下面,且前面有 k 个挂在下面的点,那么插入它的方案数是 j+k

于是有一个暴力:设 fi,j,k 表示考虑了前 2i 个位置,划分为 j 段,且有 k 个挂在下面的点的逆序对个数之积的和。转移时,枚举下一段的右端点 l>i,以及逆序对的位置 x,y(i,l]Z,并分类讨论 x,y 位置取的是奇数还是偶数即可。

注意到枚举右端点和逆序对位置都是不必要的,因为可以直接顺着扫过去,额外记一维表示当前段的状态(没选,选了一个奇数位置并且钦定下一个要选奇数/偶数位置,选了一个偶数位置,选了两个)。

时间复杂度 O(n3)

SNOI 2019. 通信

出题人是不是不会 KM。

可以发现这个问题类似于 DAG 最小链覆盖,所以考虑把每个点拆成一个左部点和一个右部点,一开始钦定每个点都自己形成一条链,总代价是 nW,对于每对 1j<in,从左部点 i 向右部点 j 连容量为 1,费用为 |aiaj|W 的边,表示把 i 接在 j 后面。

这样有 O(n2) 条边,正常费用流跑不过去(不过 KM 能过)。考虑优化建图,一种比较容易想到的方式是可持久化线段树优化建图,但还有一种常数比较小的方式:

考虑分治,假如现在要从 (m,r] 中的左部点向 [l,m] 中的右部点连边,将这些左部点和右部点的点权拿出来,得到 rl+1 个虚点,然后按点权从大到小连成一条链。这样只需要从每个 (m,r] 中的左部点 i 向它对应的虚点连费用为 aiW 的边,[l,m] 中的每个右部点 j 从它对应的虚点向它连费用为 aj 的边,就解决了 ai>aj 的情况。aiaj 的情况同理。

2.16

NFLS 模拟. 零和

原题:XXII Open Cup, Grand Prix of IMO 的 K 题。

f(S) 是可重集 S 的零和子集个数。

如果有两个值域不是很大的集合 S,T,那么可以直接将 T 内的元素整体乘上一个比较大的值,然后把 S,T 拼起来,得到一个新的集合 W 满足 f(W)=f(S)f(T)

仿照这个思路,考虑怎么样让 f 做加法。假如限制 S 内所有元素非零,那么想拼出一个零和子集至少需要一个负数和一个正数。如果所有负数的绝对值都大于正数之和的一半,那么所有零和子集中都只有至多一个负数。这样就可以让负数之间的 f 做加法了。

具体地,随机选取一个长为 k=22 的序列 a1,a2,,ak[1,5]Z,先做一个背包算出每个负数的 f,再做一个背包算出需要加哪些负数即可。

2.17

P8860. 动态图连通性

考虑最后剩下的路径是什么样子的。设 ti

2.20

NFLS 模拟. zzzyyds

2.21

POI 2012. Leveling Ground

WC 2021. 斐波那契

P5572. 简单的数论题

P5605. 小 A 与两位神仙

2.22

NFLS 模拟. travel

2.23

NFLS 模拟. 形式化题面

2.24

WC 2024. 线段树

确实可以直接 DP。不过我在考场上认为可以把每个区间直接拆成若干线段树区间,属实错得离谱。

先考虑如果只有一个询问区间,应该怎么做。从下向上 DP,每个线段树节点有三种状态:

  • 1:可以从它的子树内知道它的和;
  • 0:不能从它的子树内知道它的和,但我们不关心它的和;
  • 1:不能从它的子树内知道它的和,且我们关心它的和。

假如当前要算 u 的 DP 值 fu,1/0/1,设 u 的左右儿子是 v1,v2,感性理解一下,不合法的转移几乎只有 fv1,0×fv2,1fu,,因为不能根据 u 的和,在不知道 v1 的和的情况下还原 v2 的和。

推广到有多个询问区间的情况,此时每个线段树节点的状态有:

  • 1:可以从它的子树内知道它的和;
  • S:需要知道在 S 内的询问的和。

因为每个询问的状态是独立的,所以转移和只有一个询问区间的情况相同。

发现在这个状态中,对于每个 u,只有 O(N)S 使得 fu,S 有值。这是因为每个有值的 S 一定是从 uu 子树内某个点的路径上的询问的并。

1 这个状态分离出来设为 gu,发现对于剩下的 fu,S,只有在 S1=S2 的情况下才会有转移 fv1,S1×fv2,S2。设 S1v1x1 路径上询问的并,S2v2x2 路径上询问的并,设 T 是根到 u 路径上询问的并,由于 TS1=TS2=,所以可以直接把状态中的 S1,S2 并上 T。此时,x1x2 能够转移,当且仅当包含 x1 和包含 x2 的询问区间集合完全相同。

给每个询问区间随机一个权值,对每个点统计包含它的询问区间的权值异或和,然后 DP 的合并就只需要把权值相等的位置合并,可以用线段树合并或 std::map 启发式合并维护。时间复杂度 O(NlogN)O(Nlog2N)

2.26

USACO 2024 Jan Platinum. Island Vacation

我的题解

2.28

统一省选 2021. 图函数

秒了。

考虑 f(u,G) 的计算过程,如果一个 v 真的被删去了,那么说明 uvu 这条路径上的点都满足被删去的条件。所以在考虑 v 是否被删去的时候,可以直接删去编号 <v 的所有点。

于是 h(G) 就是下面这个东西之和:

  • 对于每个 1un,在只保留编号 u 的点时,u 所在的强连通分量的大小。

我们发现 Floyd 的过程完美符合“只保留编号 u 的点”这个条件。于是设 fu,i,j 表示 ij 的路径,除了两个端点外的点的编号都 u 的情况下,路径上边权的最小值最大是多少。(认为输入的第 i 条边具有边权 i。)

答案是容易统计的,且 f 数组的第一维可以去掉。时间复杂度 O(n3+m),循环展开后可以通过。

2.29

统一省选 2023. 城市建造

除了重心以外的部分都想到了。

考虑两个关键点 u,v,对于任意一条 uv 的简单路径,其中所有点都需要是关键点。所以对于每个点双连通分量,只要其中有关键点,那么其中所有点都是关键点。

于是建出圆方树,我们可以认为,把某个点双中的点都设置成关键点,等价于把这个点双对应的方点删去。此外,还需要满足如下条件:

  • 如果认为中间只有一个圆点的两个方点是相邻的,那么所有被删去的方点形成一个连通块;
  • 删完方点后的圆方树上,任意两个连通块的圆点个数相差不超过 k

k=0 时,直接枚举连通块大小 in,在圆方树上钦定任意一个圆点为根,对于每个圆点 u,如果 isizeu,那么需要把 u 的父亲删去。然后 DFS 一遍整棵树,检查这样一种删除方案是否合法即可。

k=1 时,有一个性质是,假如将圆方树以带权(圆点权为 1,方点权为 0)重心 r 为根,那么所有被删去的方点需要是一个在根处的连通块。

于是设 fu,i 表示:

  • 如果 u 是圆点,假如 u 的父亲已经被删除,u 的子树内有多少种方案,使得每个连通块的大小都在 {i,i+1}
  • 如果 u 是方点,定义 fu,i=vsonufv,i

看起来转移时需要做背包,但其实不用。固定 i,对于每个 u 的儿子 v,如果 sizev<i,那么 v 一定不能被删去。而如果 sizev=i,至多保留一个这样的 v

最后,分析一下可能满足条件的 i 的个数。注意到需要有 sizeuisizeumodi,推一下得到 sizeuisizeui+1,这样的 i 一定在整除分块的边界处,于是只有 O(n) 个。

k=0,时间复杂度为 O(nσ0(n)+m);对 k=1,时间复杂度为 O(nn+m)

作者:alan-zhao-2007

出处:https://www.cnblogs.com/alan-zhao-2007/p/18052739

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Alan_Zhao_2007  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题