- 博客(5)
- 收藏
- 关注
原创 【Codeforces - 1592C】Bakry and Partitioning
原题链接:Bakry and Partitioning 题意 给你一棵共n个节点的树,每个节点有对应的值,要求删除1~(k-1)条边使得所有连通块的异或和相同。 分析 对于树上异或和问题,通用做法是先处理出每个节点与其子树所有节点的异或和,一遍dfs便可获得。 一棵树删除一条边后,便会产生两个连通块,也可称为子树,【原根节点所在子树的异或和】需要异或上 【另一子树的异或和】,因为一个数连续异或相同的数两次还是原来的数。 由此可见,当只删除一条边时,要保证两个新的连通块异或和相同,当且仅当原来的树的异或和等于
2021-10-13 00:52:40
519
原创 【UVA - 12275】Sensor network 生成树
【UVA - 12275】Sensor network 题意 给出n个点m条边,求生成树最大边与最小边的最小差值。 思路 把边排序一遍,按最小生成树模板进行加边,若碰到环则搜索环中最小的边,并将其删去。当边数等于n-1时即可获得答案,取最小值输出即可。 代码 #include <iostream> #include <algorithm> #include <cstring> #include <set> using namespace std; cons
2021-08-12 14:05:51
173
原创 【学习笔记】Tarjan算法
算法简介 强连通:有向图 G 中任意两个结点连通。 强连通分量(SCC):极大的强连通子图。 Tarjan算法的原理是利用DFS生成树求强连通分量。 其中为图中每个节点uuu维护了以下变量: 变量 解释 dfn[u] 节点uuu在深度优先搜索中的次序,简称dfs序 low[u] 以节点uuu为根的子树中,通过一条不在搜索树上的边到达的节点dfn的最小值 求强连通分量的节点时,可以使用栈进行记录dfs遍历的每个节点,当dfn[u]=low[u]dfn[u]=low[u]dfn[u]=l
2021-06-29 15:20:58
193
原创 【学习笔记】树链剖分(重链剖分)
目录重链剖分概念预处理①DFS1()②DFS2()修改查询操作①对于任意两节点间的路径上所有节点修改 *O(logn)^2*查询 *O(logn)^2*②对于以任意节点为根的子树修改 *O(logn)*查询 *O(logn)*数据结构完整代码(无注释) 重链剖分 概念 树链剖分可将树划分成若干条不相交的链的形式,每条链都是自底向上的。 重链剖分能保证划分出的每条重链与轻链上的节点 DFS 序连续,并以此作为节点的序号,每颗子树中的所有节点序号在[a,a+size]范围内(子树根节点序号为a,子树大小为siz
2021-04-30 00:44:58
345
原创 【Gym - 101532F】Strings and Queries ST表
文章目录解题思路1.计算子串回文数2.存储字符串3.ST表完整代码 原题链接 题目大意:给定n个字符串与q个询问,每个字符串均按编号顺序(1~n)输入。对于每个询问均有字符串a、b(记a的编号为l,b的编号为r),需要输出 [l , r] 间拥有最大回文数的编号。 本蒟蒻一开始以为用线段树查询区间最大值就能过,结果样例2就给T飞了。观察发现本题离线查询,完全可以使用ST表查询O(1)解决。 解题思路 1.计算子串回文数 cbbaca 的子回文串有 c b b a c a bb aca,很容易联想到区间
2021-04-20 13:20:54
293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅