数据结构基本算法
_Shmily
这个作者很懒,什么都没留下…
展开
-
P5787 二分图 /【模板】线段树分治 (LCT维护删边时间最大的生成树)
题目链接题面:题解:一直也没用LCT写过题,这算是LCT写的第一个题了吧。我们用LCT维护一个删边时间最大的生成树。对于某一时刻在图中而不在树中的边我们开个数组标记一下。并开个变量记录一下奇环的数量。插入一条边时,若插入后不会成环则直接插入。如插入后会成环,则把环中的删除时间最早的边在LCT中删除,插入当前边(如果当前边是删除时间最早的,那么不删除不插入),标记所删除的边,并维护奇环的数量。删除一条边时,先检查是否是已标记的边。如果不是已标记的边,则在LCT中将这条边删除。否则修改标记并维护原创 2020-08-25 09:28:37 · 158 阅读 · 0 评论 -
P6086 【模板】Prufer 序列
你相信缘分吗,反正我是很相信,前几天刚看了prufer序列这个东西今天就看到了洛谷上的模板题。可是这个题O(n),还卡读入就很难受了。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<...原创 2020-08-24 21:34:41 · 144 阅读 · 0 评论 -
P5903 【模板】树上 k 级祖先
给定一棵 n 个点的有根树。有 q 次询问,第 i 次询问给定 xi, ki,要求点 xi 的 ki 级祖先。保证ki合法。一、树链剖分——重链剖分 O(n+qlogn):7.46s#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#incl...原创 2020-08-24 21:29:00 · 216 阅读 · 0 评论 -
P4929 【模板】舞蹈链(DLX)
题目背景本题是舞蹈链模板——精确覆盖问题题目描述给定一个N行M列的矩阵,矩阵中每个元素要么是1,要么是0你需要在矩阵中挑选出若干行,使得对于矩阵的每一列j,在你挑选的这些行中,有且仅有一行的第j个元素为1输入格式第一行两个数N,M接下来N行,每行M个数字0或1,表示这个矩阵输出格式一行输出若干个数表示答案,两个数之间用空格隔开,输出任一可行方案均可,顺序随意若无解,输出“No ...原创 2020-08-24 21:28:43 · 93 阅读 · 0 评论 -
生成树计数
一、生成树计数:例①:Highways SPOJ - HIGHIn some countries building highways takes a lot of time… Maybe that’s because there are many possiblities to construct a network of highways and engineers can’t make u...原创 2020-08-24 21:05:24 · 464 阅读 · 0 评论 -
最小树形图
日常%一发mmh学长。时间复杂度为O(n * m)。据说tarjan大神有一个(m+nlogn)的算法,但是找不到资料。。。①P4716 【模板】最小树形图:题目背景这是一道模板题。题目描述给定包含 n 个结点, m 条有向边的一个图。试求一棵以结点 r 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 r 为根的最小树形图,输出 −1。输入格式第一行包含三个整数 ...原创 2020-08-24 21:04:53 · 269 阅读 · 0 评论 -
最近公共祖先lca(2):
之前学习过一次lca,是用暴力,倍增,tarjan离线处理的。之前就知道lca还有其他两种写法,不过那个时候还不会树剖,就没学。今天学习树剖之后,发现lca树剖写法不就是个裸的树剖吗。预处理 O(n) 查询logn 比倍增还优秀一点。今天就补上没学的那两种lca的写法了。P3379 【模板】最近公共祖先(LCA):题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。...原创 2020-08-24 20:49:37 · 209 阅读 · 0 评论 -
树上分治:
一、点分治。题目①Tree POJ - 1741:Give a tree with n vertices,each edge has a length(positive integer less than 1001).Define dist(u,v)=The min distance between node u and v.Give an integer k,for every pai...原创 2020-08-24 20:48:49 · 107 阅读 · 0 评论 -
曼哈顿最小生成树:
Object Clustering POJ - 3241We have N (N ≤ 10000) objects, and wish to classify them into several groups by judgement of their resemblance. To simply the model, each object has 2 indexes a and b (a, ...原创 2020-08-24 20:48:20 · 171 阅读 · 0 评论 -
次小生成树:
一、P4180 【模板】严格次小生成树[BJWC2010]:因为是严格的,维护最大值和严格次大值就好啦。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#def...原创 2020-08-24 20:47:20 · 100 阅读 · 0 评论 -
树上差分水题:
一、Network POJ - 3417:求多少条树边被非树边覆盖了零次或者一次:注意,若一刀就能使树不连通,那么也需要第二刀去切附加边。1号节点的 cf 不算#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath&...原创 2020-08-24 20:46:28 · 114 阅读 · 0 评论 -
线段树:
一、建树、单点修改、单点查询、区间修改、区间查询:单点修改、区间查询:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int maxn = 50001...原创 2020-08-24 20:37:59 · 93 阅读 · 0 评论 -
Trie(字典树)
一、基本概念: Trie(字典树)是一种用于实现字符串快速检索的多叉树结构。Tire的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c字符指针,走向该指针指向的节点。 初始化: 一棵空Trie仅包含一个根节点,该点的字符指针均指向空。 插入: 当需要插入一个字符串S时,我们令一个...原创 2020-08-24 18:22:23 · 250 阅读 · 0 评论 -
树状数组
一、树状数组的基本应用: 其基本用途是维护前缀和。对于给定的序列a,我们建立一个数组c,c(x)保存序列a的区间[x-lowbit(x)+1,x]中所有数的前缀和。 事实上,数组c可以看作一个树形结构。叶子节点为a[1–N]。 (1)每个内部节点c(x)保存以它为根的子树中所有叶节点的和。 (2)每个内部节点c(x)的子节点个数等于lowbit(x)的位数。 (3)除树根...原创 2020-08-24 18:13:53 · 528 阅读 · 1 评论 -
最近公共祖先(LCA)
一、基本概念: 给定一棵有根树,若节点z既是节点x的祖先,也是节点y的祖先,则称z是x,y的公共祖先。在x,y的所有公共祖先中,深度最大的一个称为x,y的最近公共祖先,记为LCA(x,y)。 LCA(x,y)是x到根的路径与y到根的路径的交汇点。它也是x与y之间的路径上深度最小的节点。求最近公共祖先的方法通常有五种。 在此介绍三种,另外两种还没学。二、向上标记法: 从x向上走到根...原创 2020-08-24 18:10:15 · 1231 阅读 · 2 评论 -
最小生成树——kruskal、prim
一、最小生成树简介:给定一张边带权的无向图G=(V,E),n=|V|,m=|E|。由V中的全部n个顶点和E中的n-1条边构成的无向连通子图被称为G的一棵生成树。边的权值之和最小的生成树被称为无向图G 的最小生成树(MST)。1。任意一棵最小生成树一定包含无向图中权值最小的边。2。给定一张无向图G=(V,E),n=|V|,m=|E|。从E中选出k<n-1条边构成G 的一个生成森林。若再从...原创 2020-08-24 17:29:16 · 411 阅读 · 0 评论 -
P3382 【模板】三分法
题目连接题面:代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<string>#include<queue>#define ll long long#define llu unsigned llusing namespace std;const doubl原创 2020-08-24 22:26:25 · 63 阅读 · 0 评论 -
P3367 【模板】并查集
题目链接题面:代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<string>#include<queue>#include<map>#include<unordered_map>#define ll long long#defin原创 2020-08-24 22:25:53 · 86 阅读 · 0 评论 -
P3810 【模板】三维偏序(陌上花开)
题目连接题面:代码://因为相等的也算,所以要去重且统计相等的有多少个#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<string>#include<queue>#define ll long long#define llu unsigned llusing原创 2020-08-24 22:25:22 · 96 阅读 · 0 评论 -
P5788 【模板】单调栈
题目连接题面:代码:#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<map>#include<vector>#define ll原创 2020-08-24 22:21:54 · 170 阅读 · 0 评论 -
P5490 【模板】扫描线
题目链接题面:代码:#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<map>#include<vector>#define ll原创 2020-08-24 22:14:12 · 101 阅读 · 0 评论 -
杜教BM(解决线性递推式的模板)
一、模板#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<cmath>#include<queue>#include<bitset>原创 2020-08-24 21:53:07 · 294 阅读 · 0 评论 -
P4897 【模板】最小割树(Gomory-Hu Tree)
据说这题数据有误,给定的真实点数是n+1个,编号为0–n。实际上我做的时候,没有考虑0号节点(可能是查询里面没有0号节点,只是图出了问题)。主要学习一下怎么建立最小割树。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#in.原创 2020-08-24 21:52:31 · 114 阅读 · 0 评论 -
P6177 Count on a tree II/【模板】树分块
写了一整天,怎么调也是T,不知道题解是怎么过去的。具体的题解感觉跟我写的也差不多我就是T,可能有点卡常,还是我哪里姿势不对。下面代码是T了的,主要学习一下树分块的思想吧。树分块主要就是在树上找一下关键点。代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#i原创 2020-08-24 21:52:22 · 149 阅读 · 0 评论 -
P5043 【模板】树同构([BJOI2015]树的同构 // P4323 [JSOI2016]独特的树叶
一、P5043 【模板】树同构([BJOI2015]树的同构):#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<cmath>#include<que原创 2020-08-24 21:52:12 · 229 阅读 · 0 评论 -
P6192 【模板】最小斯坦纳树
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<cmath>#include<queue>#define ll long long#defin.原创 2020-08-24 21:52:03 · 211 阅读 · 0 评论 -
广义圆方树
一、例题①:P4320 道路相遇可能是因为把树封装了,倍增怎么写都超时。不过倍增确实慢,树剖快好多。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#i...原创 2020-08-24 21:51:53 · 302 阅读 · 0 评论 -
圆方树、仙人掌
一、仙人掌的最大独立集(就是拆分为多棵基环树来做的):注意:使用Tarjan算法时,注意题目要求需不需要处理重边。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector&...原创 2020-08-24 21:51:44 · 232 阅读 · 0 评论 -
P6329 【模板】点分树 | 震波
题目连接关于点分树的一些地方今天终于弄明白了,这个题理解的还可以,就是有点卡常,调了好久还是跑的很慢。。。。。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>...原创 2020-08-24 21:51:34 · 140 阅读 · 0 评论 -
线段树维护区间最值操作与区间历史最值 P6242
题目链接题解:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#incl...原创 2020-08-24 21:51:12 · 263 阅读 · 0 评论 -
P6178 【模板】Matrix-Tree 定理
题目连接题解:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#incl...原创 2020-08-24 21:51:04 · 89 阅读 · 0 评论 -
P5906 【模板】回滚莫队
题目描述给定一个序列,多次询问一段区间 [l,r],求区间中相同的数的最远间隔距离。序列中两个元素的间隔距离指的是两个元素下标差的绝对值。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include...原创 2020-08-24 21:41:04 · 135 阅读 · 0 评论 -
P5787 二分图 /【模板】线段树分治
①、前置知识:扩展域并查集(种类并查集):P2024 [NOI2001]食物链动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,吃 C, 吃 A。现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是“1 X Y”,表示 X 和 Y...原创 2020-08-24 21:40:55 · 123 阅读 · 0 评论 -
P5494 【模板】线段树分裂
真的是看到眼都瞎了也没看出哪里错了来。。。最后还是看出来了,pos==4的时候忘了写else。。。#include <iostream>#include <string>#include <cstdio>#include <cstring>#define ll long long#define int llusing namespac...原创 2020-08-24 21:40:03 · 111 阅读 · 0 评论 -
P6136 【模板】普通平衡树(数据加强版)
题目如同洛谷普通平衡树。数据加强,题解rank1是 WBLT 写的,本来想学一下,但是我这个 SBT 跑的还是蛮快的,就不学了。目前洛谷rank3,可是rank1,rank2都是SBT 写的。。为啥比我的要快。。#include<iostream>#include<cstdlib>#include<cstdio>#include<algori...原创 2020-08-24 21:39:46 · 141 阅读 · 0 评论 -
P6135 【模板】虚树
一个纯虚树的模板吧,不涉及啥要处理的东西。题目描述给定一棵 n 个点的有根树,树上有 k 个关键点,请你构建这些点的虚树。输入格式第一行两个整数 n,k。第二行 n 个整数 f 1…n,其中 fi 表示 i 的父亲。特别地,若 i 为根,则 fi =0。第三行 k 个整数,表示关键点。输出格式共 n 行,第 i 行两个整数 gi, di若 i 不在虚树中,则 gi = di =...原创 2020-08-24 21:39:14 · 94 阅读 · 0 评论 -
不可视境界线(inv) KD-Tree 模板
这个题可以转化一下。dp [ i ] = min ( dp [ i ] , sqrt ( dp [ j ] * dp [ j ] + dis ( i , j ) ) )i点 ( 0 , ai1 , ai2 )j点 ( dpj , aj1 , aj2)就是求 i 点之前距离 i 最近的点。其中:k=1时是二维坐标。k=2时是三维坐标。#include<iostream>...原创 2020-08-24 21:36:33 · 1361 阅读 · 0 评论 -
P3380 【模板】二逼平衡树(树套树)
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:①查询k在区间内的排名②查询区间内排名为k的值③修改某一位值上的数值④查询k在区间内的前驱(前驱定义为严格小于x,且最大的数,若不存在输出-2147483647)⑤查询k在区间内的后继(后继定义为严格大于x,且最小的数,若不存在输出2147483647)#注意上面两条要求和tyvj或者bzoj不一样,请注...原创 2020-08-24 21:34:02 · 158 阅读 · 0 评论 -
P3402 【模板】可持久化并查集
①用可持久化线段树加按秩合并实现:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#define ll long long#define llu unsigne...原创 2020-08-24 21:32:49 · 88 阅读 · 0 评论 -
P3919 【模板】可持久化数组(可持久化线段树/平衡树)
其实就是用主席树来实现的可持久化数组:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#define ll long...原创 2020-08-24 21:29:10 · 81 阅读 · 0 评论