摘要:
(淀粉汁) 对于静态的树上路径统计问题,点分治可以通过$O(n\logn)$的遍历复杂度求解。大概的思想是分通过每个节点的路径来统计。 首先我们对于树上统计问题,考虑这样一个思路:从每个节点开始,每次统计完所有通过这个节点的路径之后,把这个点从树上删除,然后递归统计所有剩下的子树。重复该步骤,直到统 阅读全文
摘要:
树剖是把一棵树拆成一堆链,$O(logn)$地跳链,用一些数据结构维护每条链,从而实现增加1k代码而降低复杂度到$O(log^2n)$的效果。 树链剖分大概分三种:长链剖分,实链剖分和重链剖分。一般说树剖就是重链剖分。 如何把树拆成链?我们定义一个节点的重子节点是它子树最大的儿子,其余的为轻子节点。 阅读全文
摘要:
单调队列优化dp是个相对比较不显然的优化。 例题:P2034 选择数字 题意:一串正整数,选择若干个数使和最大,且没有连续的超过k个数被选择。 首先显然是个dp题。方程也比较显然。设$dp[i][1]$为选择第i个数后最大值, $dp[i][0]$为不选第$i$个数的最大值,$s$数组存前缀和。则方 阅读全文
摘要:
Tarjan 大概分两类:无向图连通性和有向图连通性。先说有向图,比较简单。(大概) 有向图的连通性大体上就一个:强连通分量。这个我觉得大家都背过了。 首先定义两个数组$dfn,low$。$dfn$是每个节点在搜索树中的dfs序,low的定义是满足下列条件的最小$dfn[x]$: 该点在当前搜索栈中 阅读全文
摘要:
单源最短路: Dijkstra 没有堆优化的是$O(n^2)$的。但是由于防止一些毒瘤完全图,在此一并表出。(其实好像也卡不了多少) dijkstra的思想其实就是贪心。每次扫一遍所有点然后找当前距离最短的一个更新答案。某种程度上很像dfs。另外由于它的贪心性质,它不能判负权边。 void dijk 阅读全文