- 博客(4)
- 收藏
- 关注
原创 强联通分量(tarjan)
即如果在访问的过程中找到一个访问过的点,就在回溯过程中将路径上点的low全部化为一个可以代表整个连通分量的数字,即访问该连通分量时的第一个访问的数字。在这个图中7会被划分成一个额外的连通分量而不是和2->3->6->4划为一个整体, 为了解决这个问题,在这里我们可以用一个color数组去记录每个点所属的连通分量,通过判断下一个遍历点是否处于同一色块来判断是非需要划分。有向图的极大强连通子图称为的强连通分量,强连通图只有一个强连通分量,即是其自身。首先先建图,然后在遍历的过程中对每个点的访问顺序打上标记。
2023-08-29 14:29:16
238
原创 LCA模版
那我们用ST表记录st[x][i]表示向上跳2^i个点,跳了之后如果该点为两点的祖先节点就换更小的i来跳,反之则将x,y更替为st[x][i],st[y][i]。接下来考虑如何查找最近公共祖先,可以先将两个点升到同一高度,再同时往上跳,但这么做的时间复杂度为O(nm)肯定会超时。优化思路:下面是一个树,如果我们要求6号节点和7号节点lca,我们可以先列出一个式子,表示第i层时他们的祖先节点是否是同一个点。问题:输入一棵n个结点的树,以及m组请求,每个请求是两个结点,求它们的最小公共祖先。
2023-07-20 19:34:36
118
原创 状态压缩模板
我们用1和0来表示两种状态,分别是放和不放,那当前棋盘的状态表示为一个n位的二进制数。该棋盘的状态总数就有2^n个,分别是从0000...0(n个0)到1111...1(n个1),遍历过程就由0遍历到1
2023-07-20 16:46:12
85
原创 单调队列-滑动窗口
遍历的过程之中,若新数大于当前队列中的最大值,且队列不为空,则将队列中的数据弹出。前置:dequq头文件,双向队列,用于记录当前区间之中可能是最值的数的下标。如果当前队列的长度大于规定区间的长度,则将不在该区间的数据弹出。最后在达到满区间之后,将区间最值输出。读入数据之后,对该数组进行遍历。将新数加入到当前队列中。作用:维护区间最值。
2023-07-19 16:36:43
143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人