游戏「并查集」 题目描述 Mirko和 Slavko 爱玩弹球戏。在一个令人激动的星期五,Mirko 和 Slavko 玩了一把弹球游戏。Mirko 构建一个有向图,所有顶点最多有 1 条出边。弹球从 1个顶点出发可以沿着一条边移动到它的邻接点,只要它存在,而且它会继续移动到后者的邻接点去,直到最后 ...
分类:
其他好文 时间:
2020-07-16 22:01:22
阅读次数:
76
常规并查集 模板 #define Maxsize 100+1 int f[Maxsize]; void init(int n){ for(int i = 1; i <= n; i++) f[i] = i; } int find_f(int a){ if(f[a] == a){ return a; } ...
分类:
其他好文 时间:
2020-07-16 11:58:56
阅读次数:
105
重新做了一下这道并查集的题目,关键要点是抓住这种循环的关系和模运算的通性,进而利用加权并查集 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; cons ...
分类:
其他好文 时间:
2020-07-15 23:39:09
阅读次数:
63
先讲下部分分怎么搞。 有个非常暴力的暴力做法: 对于每一个询问,把边权大于 \(w_j\) 的边加入,并查集维护联通块即可。 时间复杂度 \(\mathcal{O(qm)}\),可以过 \(\mathrm{Subtask\ 1}\) 当 \(t_i=2\) 的时候,可以直接 kruskal 重构树, ...
并查集的作用 并查集是用树的形式维护所有集合 每一个集合用一个树来维护 每一个集合的编号是它根节点的编号 令每一个树根的p[x] = x 然后对于每一个点,都存储一下这个点的父节点是谁,p[x] = ? 然后当我们想求某个点属于哪个集合的时候 就找到这个点的father,然后看其是不是树根,不是的话 ...
分类:
其他好文 时间:
2020-07-14 13:23:44
阅读次数:
48
题目描述 题解 必须要发掘出性质才能搞,乱找找不满 一草稿纸的114514越看越草 发现5只出现一次,而且14是114的子串 显然可以想到每次按最近的来匹配,一次找出一个114514 发现114511451414会挂掉,原因是把第二个5的114给拆掉了 1的数量最多,所以只考虑总量不考虑单独每个 对 ...
分类:
其他好文 时间:
2020-07-13 11:15:32
阅读次数:
64
题意:给定一个n * m的矩形,每个格子有两种颜色,一开始有t个格子上是黑色。对于任意的两行两列,如果交汇的四个格子中有三个是黑色,那么第4个会被自动变成黑色。问你至少需要手动涂黑几个格子,可以使得整个矩形内的格子都变成黑色。 分析:对于三个已经涂黑的格子$(r1, c1)(r1, c2)(r2, ...
分类:
其他好文 时间:
2020-07-11 17:34:01
阅读次数:
55
Tarjan求Lca 倍增求Lca tarjan求lca 这种算法本质上是用并查集对向上标记法的优化,是离线算法,即一次性读入所有询问,统一计算,统一输出。 时间复杂度$O(n+m)$ v[]进行标记 \(v[x]\doteq 0\) --> x节点未访问过 \(v[x]\doteq 1\) --> ...
分类:
其他好文 时间:
2020-07-10 10:03:22
阅读次数:
80
目录 二分查找 排序的写法 BFS的写法 DFS的写法 回溯法 树 递归 迭代 前序遍历 中序遍历 后序遍历 构建完全二叉树 并查集 前缀树 图遍历 Dijkstra算法 Floyd-Warshall算法 Bellman-Ford算法 最小生成树 Kruskal算法 Prim算法 拓扑排序 查找子字 ...
分类:
其他好文 时间:
2020-07-07 18:08:11
阅读次数:
74
Description 传送门 Solution 注意到$DFS$的时候每次选择一个$DFS$树的子树后必然会走所有子树中的节点,所以原问题变成所有子树内的顺序乘子树外的顺序。 这样可以将还没有经过的节点状压,进行记忆化搜索。$DFS$树的子树个数就是去掉当前点之后的连通块个数,用并查集维护即可。 ...
分类:
其他好文 时间:
2020-07-07 13:32:39
阅读次数:
62