『杂题总结』Day11 略解

前言

只闻花香,不谈悲喜。饮茶颂书,不争朝夕。

对 BZ 的题目彻底失望了,开始自己瞎搞了。

1. CF2057E2

标签:Floyd

首先先考虑朴素做法。考虑每次询问二分答案,边权比 mid 小的边当作 0,否则当作 1。如果 ab 的最短路 k,那么就是合法的,否则就是不合法的,然后继续二分即可。

我们发现,只考虑边权为 0 的边,会形成若干个连通块,每个连通块内部的点可以缩成一个点(因为里面的点两两距离都是 0,所以可以看成同一个点)然后再算距离。进一步的,对于每个连通块内部的边权为 0 的边,实际上我们只需要保留在原图最小生成树上的边即可。(因为我们只关心连通性)

由于最小生成树上只有 n1 条边,也就是说,二分的答案本质上只有 O(n) 种,故我们可以考虑在询问之前预处理出在这 n 种答案下任意两个点的最短路。(可以认为是一个每次使用 O(n2) 时间复杂度插入一条边的 Floyd 来实现。)

故总时间复杂度 O(n3+qlogn)

Code

2. CF2057G

标签:构造。

感觉挺精妙的一个构造,反正我是没有想到的。

首先,如果我们能构造出五种方案,他们的 |S| 的和为 s+p,那么必然存在一种方案满足 |S|s+p5

考虑如何去构造这样的五种方案。(说实话,为啥要这么想啊,头一次见这样的技巧。。)

题解告诉我们:

如果能将所有点染上五种颜色,使得任何一个点的邻域和自己恰好为这五种颜色,那么对于每种颜色 i,取 S 为所有颜色为 i# 格子,以及不被上述任何一个格子覆盖或相邻的 # 格。后者只会出现在边界上,且边界外对应的格子恰好是颜色 i

显然,这五种方案的 S 之和都是 s+p

可以发现,如果 coli,j2×j+i(mod5)

然后直接构造即可。

Code

3. CF2048G

标签:组合数学,容斥。

题目中给定的矩阵合法条件,等价于:存在一个 (i,j),满足 ai,j 是这一列上的最小值,且是这一行的最大值。

然后发现,如果我们去枚举 (i,j)ai,j 的值暴力计算的话,是会算重的。

简单分析一下,算重的情况是因为存在了多个 (i,j),满足了既是列最小值又是行最大值的条件,所以被计算了多次。并且,这样的方案中,满足条件的点对 (i,j) 必然构成了一个 n×m 的方格(当然,不一定是连续的),并且所有的满足条件的 (i,j)ai,j 均相同 。

故我们考虑容斥,即枚举 n,m,然后再枚举满足条件的 (i,j)ai,j 的值 a,那么答案就是(下文为了方便就用 i,j 表示了):

a=1vi=1n(1)i+1×Cni×(j=1m(1)j+1×Cmj×ai×(mj)×(va+1)(ni)×j×v(ni)×(mj))

我们发现 m 的值非常大,于是考虑对于括号里面的运算观察是否能快速进行。

now=j=1m(1)j+1×Cmj×ai×(mj)×(va+1)(ni)×j×v(ni)×(mj)=(1)×ai×m×(j=1m(1)j×Cmj×(ai×(va+1)ni)j×(vni)mj)=(1)×ai×m×((j=0mCmj×((1)×ai×(va+1)ni)j×(vni)mj)+(vni)m)

然后由二项式定理,我们可以直接省掉对于 m 的枚举:

now=(1)×ai×m×((vniai×(va+1)ni)m+(vni)m)

然后将 now 带回原式,我们就成功通过了。

时间复杂度 O(n×v×logm)

Code

posted @   Saltyfish6  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
Document
点击右上角即可分享
微信分享提示