省常中集训Day6 2022.8.8

1.简单计数:

题意:

求出有多少个序列满足:

(1). 长度为 m,

(2). 序列中的元素由 [0, n − 1] 中的整数构成,

(3). 和为 k。

题解: [隔板法]:

考虑没有第二个限制的情况,问题可以转化为 m + k − 1 个格子里放 m − 1 个球, 因此答案为 C (m−1,m+k−1) 。

接下来考虑容斥,减去至少一个位置不满足的情况,加上至少两个位置不满足的情 况... 若有 p 个位置不满足,方案数为 C (p,m) × C(m−1,(m+k−1)−p×n) 。

source:简单2的n次方枚举

2.佛学骗子:

题意:给定一张二分图,每个点有一个点权。 定义一个点集是骗子,当且仅当存在原图的一个匹配覆盖了这个点集。 定义一个点集是学佛,当且仅当这些点的点权和不小于 t。 求有多少学佛同时也是骗子。

题解: [ Hall 定理 ]:

 对于一个二部图 G(X, Y ),X 存在一个匹配的充分必要条件为对于 X 的任意子集 S,S 的邻居个数 N(S) 必须大于等于 S 的大小 |S|。

因此,我们可以分别统计出二分图两侧可行的骗子集合。注意到一个性质,二分图 两侧的是独立的,即两个二分图两侧可行的骗子集合拼成的集合一定是一个满足骗子 的条件。 所以我们可以 O(n × 2 n ) 统计两侧的骗子集合,再通过一个队列计数。

source:不太懂

3.城墙建设:

题意:查找网格中边长不小于L的城墙围城数量,围城为 a × a - [(a − 2) × (a − 2)],中间为空的“回”字形状,只考虑围城墙上没有军事基地。

题解:有点看不懂

source:横竖两个前缀和,分别判段上下左右四条边上是否有军事基地,也就是前缀和相减有差值,枚举时间O(n*m*4)

4.树形区间:

题意:

(1). 若节点 x 被选中且节点 x 不是根节点,那么节点 x 的父亲也需要被选中;

(2)对于选中的每个节点 x,都需要满足:找出所有在 x 的子树内的选中的点,这些点 上的数字互不相同且合在一起是一段连续区间。

求有多少种不同的区间。

题解:

存下所有以 i 为根的子树,数字区间合法的左端点、右端点。进行树形 DP,因为 每颗子树都需要是一段区间,我们只需将区间进行连接。

显然合法左端点、右端点可以分开计算,先以计算合法右端点为例。枚举所有儿子 的所有合法左端点,给每个数字维护一个链表,把这个儿子挂在左端点的链表下面。

维护数组 is[x] 表示 x 能不能作为一个合法的右端点。

从 vi + 1 到 100 枚举 j,如果 is[j−1] =True,那么就可以把一个 j 开头的区间拼 接在后面,那么扫描数字 j 的链表,链表中的每个儿子的合法右端点都能够作为合法 右端点,将他们的 is 标记为 True。再维护每个儿子是否已经在之前的某链表中出现, 避免重复标记。答案显然就为 1 的合法左右端点数的乘积。

时间复杂度 O(n max vi)。

source:不太懂


二分图: %大佬

Hall定理:%%大佬

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值