解题思路总结

拆点

因为处理点往往很困难,且图论中大部分算法是对边进行操作,故可以将点拆成两个状态并连边,再运用算法解决问题。

常用于:网络流建立模型、布尔值相关问题

例题:
【SCOI2007】蜥蜴

树上序列

大部分树上序列(如欧拉序)都让同一子树的节点连续排列,从而使诸如线段树、莫队等的数据结构和算法可以解决树上的在线查询和修改的问题。

比如树上莫队和树链剖分,其实都用到了类似的思想,从而减小了时间复杂度,故而这是解决树问题的一个非常强大的工具。

例题:
【WC2013】糖果公园(详解)

异或的特点

a a a 异或上数 b b b 得到数 c c c ,则必有 c ≥ a 、 c ≥ b c ≥ a 、c ≥ b cacb ,这是有时解决异或题目非常有用的性质,比如博弈论中经典的 N i m Nim Nim游戏的解法证明正是基于异或的这个性质。

例题:
博弈论—— N i m Nim Nim游戏

影响的传递

在处理数组时,有时会遇到区间处理的问题,如果这个问题无法快速合并和转移(即无法使用线段树、莫队等类似算法时),那么可以考虑数与多个数之间的影响,考虑能否进行分块并快速求出分出的每一块的贡献,进而将问题简化。

例题:
【NOIP2018 提高组】 铺设道路

倍增法

在处理区间上的问题时,若两个相邻区间间存在比较容易的合并方法,则可以使用倍增法将时间复杂度中的一个 n n n 降为一个 $㏒2n $。

倍增法的运用非常多,如: R M Q RMQ RMQ问题中的st表、求 L C A LCA LCA中的倍增法后缀数组 S A SA SA的快速求解……

例题:
【模板】后缀排序

贡献的传递性

有些时候贡献的传递性非常重要,它可以帮助你降低时间复杂度,比如从 O ( n ) O(n) O(n) 降到 O ( ㏒ 2 n ) O(㏒_2n) O(2n) ,这一方法在 S O S D P SOS DP SOSDP 中有所使用。

答案的区间性

当一道题的暴力非常好写时,可以先从暴力算法入手,然后考虑优化,其中一个优化的方法就是考虑答案之间是否存在区间性,即一个答案它和满足某些条件的答案是否有一定的条件关系(比如 当 i > j i>j i>j时,必有 a n s [ i ] ≥ a n s [ j ] ans[i]≥ans[j] ans[i]ans[j] ),从而降低时间复杂度。

这一思想在莫队中有所使用,区间的转移其实就是这样的,还有求了后缀数组 S A SA SA 后求 h e i g h t height height 数组,也是运用了同样的方法。

例题:
【NOI2015】品酒大会

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值