Tricks
-
每次删一个点,多次询问,但是方便加点不方便删点可以考虑分治模拟删点(把当前的另一半区间全加上,然后递归到子区间)。
-
差分约束 \(=\) 转化成 \(\le and \ge\)。
-
左边 \(n\) 个点右边 \(m\) 个点的完全二分图的生成树数量是 \(n^{m-1}m^{n-1}\)。
-
(树)一个连通块内点数 \(-\) 边数 \(=1\),所以总连通块数就是点数 \(-\) 边数。e.g.
-
线段树合并时删去的点可以重新利用(garbage),在此基础上有时候可以优先遍历重儿子:reference。
-
需要多次排序但又不太关注每个数具体大小时(关注相对大小),可以二分一个 \(mid\),把 \(\ge mid\) 的设置成 \(1\),\(\le mid\) 的设置成 \(0\),借助线段树在 \(\operatorname{O}(\log n)\) 时间内完成排序。就是这个题。求中位数也可以这样。
-
(2024 一轮省集 D8T2)对于一条路径只贡献一次的问题,可以把点权设置为 \(w\),边权为 \(-w\),进行树上差分。
-
不要无脑树剖线段树,有些问题可以树上差分做到线性或者线性对数,避免两只 \(\log\)。总结一下:
- 单点加路径查:dfs 做根到单点的前缀和即可,查询变为
sum[u]+sum[v]-sum[lca]-sum[fa[lca]]
。 - 路径加单点查:对于路径直接差分,路径两端点加,\(lca\) 和 \(fa[lca]\) 减,查询做子树和。
- 更进一步的有同时有链和子树的,不展开写了,大概使用到分离变量,开两个数据结构维护。reference1 and reference2
- 单点加路径查:dfs 做根到单点的前缀和即可,查询变为
-
算组合数的时候,一定要注意 \(n-m\) 是不是会出现负数!这个问题遇到两次了。
-
有 \(\sum\limits_{i=1}^n x\bmod i\) 或者干脆就是 \(\sum\limits_{i=1}^n\frac{x}{i}\) 想想整除分块啊??!
$$\text{看完了不点个赞再走嘛!!!}$$
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现