近期总结2024.1.23

CF1097G Vladislav and a Great Legend#

题意:一棵有 n 个点的树,设 w(S) 为使点集 S 连通的最小边数。给定 k,求 Swk(S)(mod109+7)1n105, 1k200


考虑第二类斯特林数:

Swk(S)=Si=0min(w(S),k)(w(S)i){ki}i!=i=0k{ki}i!S(w(S)i)

我们只需要求对于每个 iS(f(S)i) 的值。

这个式子意思是对于所有的 S,选对应连通块中的 i 条边的方案数,其实就是树上背包。

f[u,i] 表示在 u 子树中考虑了包含 u 的所有连通块,选其中 i 条边的方案数总和。

然后乱 DP 一波即可,根据经典结论,时间复杂度为 O(nk)


AGC030F Permutation and Minimum#

题意:给出 n,有一个 1...2n 的排列 a,部分数字未知。现在将排列 a 填完,设 bi=min(a2i1,a2i),问可以得到多少种不同的 b 序列,模 109+71n300


首先,若 a2i1a2i 都已知,那么 bi 可以直接确定,我们把这些位置扔掉。

那么 a 中剩下的,对于位置 2i12i,对应的数字要么已确定、一个未知,要么都是未知。

由于 bi 的取值只和最小值有关,考虑把数字从大到小填入 a。填的过程中,可能有的数字已经确定位置,有的未确定,我们不可能把两个位置一确定的数放在同一组(一组定义为 2i12i)。

f[i,j,k] 表示填了后 i 个数字,这 i 个数字中还未和其他数字匹配在一组的有 j+k 个,其中 j 个位置未确定,k 个已确定。

转移先考虑这个数是否已确定。

若已确定,他有两种选择:

  • 和一个更小的数字分在同一组:f[i,j,k+1]f[i1,j,k]

  • 和之前一个较大的数分在同一组,这个数是 j 个中的一个:f[i,j1,k]f[i1,j,k]

若未确定,也有两种选择:

  • 和一个更小的数字分在同一组:f[i,j+1,k]f[i1,j,k]

  • 和之前一个较大的未知位置的数分在同一组,设有两个未知数字的组,除去之前已占用的组个数为 b(可以算出来):f[i,j1,k]f[i1,j,k]×b

  • 和之前一个较大的已知位置的数分在同一组:f[i,j,k1]f[i1,j,k]

时间复杂度 O(n3)


CF516D Drazil and Morning Exercise#

题意:一棵树,n 个点,有边权。对于点 u,设 du=maxv{dist(u,v)}。有 q 次询问,每次给出一个 k,找一个连通块 S,满足 maxuS{du}minuS{du}k,求最大的 |S|1n105, 1q50


考虑一棵树的“中心”,设其为点 r,满足 drd1...n 中最小的。类似于重心,我们可以证明 d 最小的点至多有 2 个。

以点 r 为根,不难发现,对于点 u(ur),设其父亲为 f,总有 dudf,一个点的祖先的 d 总是 他的 d

考虑直接把树遍历一遍,扫到一个点 u 时,通过二分得出他能贡献到的一条链,差分即可。

时间复杂度 O(qnlogn),用双指针代替二分可以做到 O(qn)


CF1149D Abandoning Roads#

题意:一张无向连通图,有 n 个点和 m 条边,边权只有 a,b 两种,对于每个 1in,求所有可能的最小生成树中 dist(1,i) 的最小值。

1n70, n1m200, 1a<b107


删去所有的边权为 b 的边,会剩下一些连通块,每条边权值都是 a

显然,一个连通块内的点互相到达时,只能走权值为 a 的边。

如果需要在多个连通块内互相到达,需要经过权值为 b 的边。

可以用并查集来维护所有连通块,然后跑最短路。每次遍历一条边时,检查两点是否处于同一个连通块。仅仅如此,我们仍然无法保证“同一个连通块只走权值为 a 的边”这个条件。

如图,按照上述的方式跑最短路,会经过右边的部分,经过两条权值为 b 的边后又回到了原来的连通块,这样是错误的。

因此,为了防止回到原来的连通块,需要状态压缩记录经过的连通块编号,时间复杂度 O(2nnmlogm)

不难发现点数 3 的连通块无需考虑可能走回的情况,实际上只有 n4 个连通块需要记录,时间复杂度 O(2n4nmlogm)

由于边权只有两种,可以开两个队列来 BFS,一个满足头尾 a,一个满足头尾 b,每次取两个队头中最小的,遍历权值为 a 的边后加入第一个队列,b 的加入第二个队列。

时间复杂度 O(2n4m)

出处:https://www.cnblogs.com/Sktn0089/p/17982226

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

posted @   Lgx_Q  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示