2021年第42周总结

2021年第42周总结

10.18

K短路问题

P4467

使用Astar算法解决了k短路问题。

LC 5905

这是一道关于严格次短路的问题,使用BFS求解即可.

ABC 223

Problem F

括号序列的套路题目,创建前缀和,线段树维护区间前缀和最小值和区间加和即可。

Problem G

树的最大匹配。

使用树上DP+树上背包解决了一道毒瘤题目:P1623

感觉是我写过最难的树上背包了。

然后尝试去解决这个题,本质思路是树形DP,但不是普通的树形DP,使用了Rerooting DP方法解决了这个题。

Rerooting DP 总结

10.19

ABC 223

Problem H

这是一道关于线性基的题目。

运用离线后缀查询,需要实时维护线性基中基向量的最早位置。

看着某一位大佬的提交sm搞过去了。

找个时间一起讨论一下这个题。

10.22

ABC 203

Problem D

给定 N × N N \times N N×N 个方格,求出每个 K × K K \times K K×K 方格中中位数最小的那个,考虑二分答案。二分为是否有比 x x x更小的中位数了,符合二段性因此可以二分。二分中check函数使用前缀和转换成01矩阵的方式进行计数即可。

CF 702

Problem F

我们枚举 C C C然后求出需要删除的数字个数即可,考虑每个数字出现 C C C次,我们可以通过前缀和的方式求出小于出现 C C C次数字的个数,减去即可。然后考虑大于等于出现次数 C C C次数字的种类,然后直接计数即可。所以我们需要两个前缀和数组。 n u m [ x ] num[x] num[x]表示小于等于出现 x x x次数字的个数, n u m 1 [ x ] num1[x] num1[x]表示小于等于出现 x x x次数字的种类。

Problem G

和网络赛那个题有异曲同工之处,仍然是列出式子 k × s u m + p s u m i ≥ X i k \times sum + psum_i \geq X_i k×sum+psumiXi 然后根据 s u m sum sum的正负对该式子进行讨论答案,得到最小的 k k k之后,通过二分查找找到符合条件的最小的 i i i的位置即可。

CF 749

Problem E

首先考虑条件成立的必要条件,每个顶点在查询中出现的次数必须为偶数,如果存在奇数节点 v v v,很显然那么无论如何也不能将他相邻的边都变成偶数的权值。假设所有的点的出现次数都为偶数,考虑图 G G G的任何一颗生成树 T T T,每对顶点之间的路径都是唯一的,因此,我们只需要每次输出每次查询 ( u , v ) (u,v) (u,v)之间的路径即可。

考虑为什么这么做可行,考虑第一次查询 ( a 1 , b 1 ) (a_1,b_1) (a1,b1),如果我们想让这条路径的边为偶数权,那么我们必须存在一次查询也是 ( a 1 , b 1 ) (a_1,b_1) (a1,b1),或者存在两次查询 ( a 1 , c ) (a_1,c) (a1,c), ( c , b 1 ) (c_,b_1) (c,b1),我们发现顶点是数量都是偶数。假如只存在一条覆盖 ( a 1 , b 1 ) (a_1,b_1) (a1,b1)路径的路径 ( A , B ) (A,B) (A,B),那么就相当于割裂成两个独立路径 ( A , a 1 ) (A,a_1) (A,a1), ( b 1 , B ) (b_1,B) (b1,B)在图中,因为我们假设让一条路径的边为偶数权,只能是每个顶点在查询中出现的次数必须为偶数,所以根据数学归纳法得知:

每个顶点在查询中出现的次数必须为偶数 ⇔ 存 在 某 一 个 生 成 树 的 路 径 覆 盖 \text{每个顶点在查询中出现的次数必须为偶数} \Leftrightarrow {存在某一个生成树的路径覆盖} 每个顶点在查询中出现的次数必须为偶数

10.24

ABC 224

Problem E

考虑当前位置 ( r , c ) (r,c) (r,c)能够到达达最大的一定是下一个比他稍大的那个,因此我们只需要找到每一行比他次大的哪一个即可,因此考虑DP可以求解。

需要注意,因为存在相同的元素,因此要选择相同元素中最大的那个即可。

或者,可以像题解那样,定义两个数组 r m a x [ x ] rmax[x] rmax[x] c m a x [ x ] cmax[x] cmax[x]代表 x x x行或列中能到达最大的步数,进行DP维护更新即可。

LC 638

多维背包+状态压缩, n n n进制可以推广至可变基底的进制计数。即位权为 w i = ∏ j = 0 i − 1 ( A j + 1 ) w_i = \prod_{j = 0}^{i - 1}(A_{j}+1) wi=j=0i1(Aj+1) A [ j ] A[j] A[j]为第 j j j位上能取得的最大数码。

CF 750

Problem C

外层枚举删除的字母,从尾部开始构造元素,即 s t r [ l ] = s t r [ r ] str[l] = str[r] str[l]=str[r]那么 l + + , r − − l++,r-- l++,r,如果 s t r [ l ] ≠ s t r [ r ] str[l] \neq str[r] str[l]=str[r]并且 s t r [ l ] = d e l str[l] = del str[l]=del,那么就必须删除 l l l位置的字母,另外 s t r [ r ] = d e l str[r] = del str[r]=del也同理,当KaTeX parse error: Undefined control sequence: \and at position 17: …tr[l] \neq del \̲a̲n̲d̲ ̲str[r] \neq del,那么这种方案是不行的。

Problem D

考虑 n n n为奇数时,取前三个 a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3将这三个数看成一个向量,再挑选两个不共线的向量 v 1 , v 2 v_1,v_2 v1,v2分别做矢量叉乘,取不为零的那个向量即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值