摘要: lca,即最近公共祖先。最近公共祖先,顾名思义,就是树上两个点最近的祖先。 我们大体上有三个算法来搞。 第一个:$O(nlogn)$预处理,$O(1)$查询。 大体上是借用了rmq问题的思路(就是区间最大/小值)来处理。 将树上问题转化为区间问题。 void dfs(int rt,int d){ v 阅读全文
posted @ 2022-09-03 19:05 gtm1514 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 专门开个博客一是因为没地放了,二是以后次小生成树什么的就一块扔这了。 最小生成树 点数n,边数m的图的最小生成树大概有两个算法: Kruskal算法($O(m\log m)$) 思路非常简单粗暴,把所有边扔出来按照边权排个序,然后拿并查集维护点的连通关系,最后选出n-1条边。 int kruskal 阅读全文
posted @ 2022-09-03 19:05 gtm1514 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 三个很基础的板子放到一块。发现原来没有位置放了于是现开一个。 upd:加了一个。 字符串哈希 hash的思想是把一个字符串拍成一个数存储,这样就能快速比较两个字符串是否相同。 大概的方法: 我们选取一个合适的进制数(比如131这样的质数)和一个较大的模数。 将这个字符串看作一个p进制数(因为每个字符 阅读全文
posted @ 2022-09-03 19:04 gtm1514 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 二分图,顾名思义,能分成两部分,每部分之间没有边的图。判定很简单,染色法,没有奇环就行。 void dfs(int x,int col){ v[x]=col; for(int i=head[x];i;i=edge[i].next){ if(!v[edge[i].v])dfs(edge[i].v,3- 阅读全文
posted @ 2022-09-03 11:50 gtm1514 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 其实就是spfa 话说看spfa的时候突然发现我原来判负环的板子是锅的然后wa了好几次 就是形如$x_i-x_j\le k$的一群问题。我们发现把这个东西移个项之后变成了 $$x_i \le x_j+k$$ 看着长的就很像最短路。所以就从$j$到$i$连一条权值为$k$的边,用最短路搞吧。特别的,有 阅读全文
posted @ 2022-09-03 11:47 gtm1514 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 欧拉路 首先结论: 一个图存在欧拉路则每个点的入度等于出度或者一个点的入度比出度大一(终点),一个点的入度比出度小一(起点),其他点入度等于出度。 然后是朴实无华的爆算。 void dfs(int x){ for(int &i=head[x];i;i=head[x]){//这里推荐这么写 机房某大佬 阅读全文
posted @ 2022-09-03 11:47 gtm1514 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 我也不知现在我学这个干什么但是真的闲着没事干又不想卷whk所以就来了。 首先前置芝士懵逼钨丝反演我之前已经差不多写过一个,但是有些结论建议看看oiwiki什么的反正我也没写。 首先杜教筛大家知道是个亚线性复杂度求积性函数前缀和的东西。于是现在我们有一个积性函数$f(i)$,要求它的前缀和$S(n)= 阅读全文
posted @ 2022-09-03 11:46 gtm1514 阅读(8) 评论(0) 推荐(0) 编辑
摘要: joke3579大佬一直劝说我来切莫反 于是我切了一顿发现我一道都不会 所以写个这么个东西来稍微总结一下 莫比乌斯反演 首先莫比乌斯函数和狄利克雷卷积我就不说是什么东西了 整除分块不会的去看oiwiki抄一份过来就行 直接进入正题 反演公式 若$f(n)=\sum\limits_{d|n}g(d)$ 阅读全文
posted @ 2022-09-03 11:42 gtm1514 阅读(22) 评论(0) 推荐(0) 编辑
摘要: (淀粉汁) 对于静态的树上路径统计问题,点分治可以通过$O(n\logn)$的遍历复杂度求解。大概的思想是分通过每个节点的路径来统计。 首先我们对于树上统计问题,考虑这样一个思路:从每个节点开始,每次统计完所有通过这个节点的路径之后,把这个点从树上删除,然后递归统计所有剩下的子树。重复该步骤,直到统 阅读全文
posted @ 2022-09-03 11:41 gtm1514 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 树剖是把一棵树拆成一堆链,$O(logn)$地跳链,用一些数据结构维护每条链,从而实现增加1k代码而降低复杂度到$O(log^2n)$的效果。 树链剖分大概分三种:长链剖分,实链剖分和重链剖分。一般说树剖就是重链剖分。 如何把树拆成链?我们定义一个节点的重子节点是它子树最大的儿子,其余的为轻子节点。 阅读全文
posted @ 2022-09-03 11:40 gtm1514 阅读(37) 评论(0) 推荐(0) 编辑