==========数据结构==========
kma_093
山高水闊 苦海無涯
展开
-
树链剖分刷题总结
前言 因为\(kma\)过菜导致被数据结构吊打QWQ,这里总结一下做过的树剖题,大概是个一句话题解+记录犯过的睿智错误的地方 染色 传送门 染色 分析 先考虑在线段树上维护区间颜色段的做法:记一下区间左右端点,每次合并上来是左儿子总数+右儿子总数,再判一下中间颜色是否一样决定是否-1 在树上维护同理,注意在跳重链的时候判一下两段重链相邻部分是否颜色一致 博客链接 染色 月下“毛景...原创 2019-07-08 23:36:00 · 137 阅读 · 0 评论 -
洛谷p2216 [HAOI2007]理想的正方形
题目链接: 理想的正方形 题目分析: 这道题对于我这种菜鸡来说其实有点难……值得一做核心思想:分别在行和列上维护单调队列 用x_min[i][j]表示以mapp[i][j]为起点向右推n个里的最小值,最大值同理 用y_min[i][j]表示以mapp[i][j]为起点向下推n个里的最小值,最大值同理 先用mapp更新x_min,x_max,再用x_min,x_max分别更新y_min,y_m...原创 2019-01-20 01:13:00 · 93 阅读 · 0 评论 -
[SCOI2016] 萌萌哒
题目链接: 传送门 题目分析: 一道并查集好题 首先考虑暴力思路:由于每次给定区间内的数字要一一相等,把每个数字看成一个点,需要相等的数字就可以合并成一个点,用并查集维护 最后计算独立集合的个数,答案为\(9*10^{k-1}\)(首位不为1,只有9种选择) 上述思路复杂度是\(O(nm)\)的,显然跑不过,考虑优化 由数据范围想到\(log\)级别的算法,考虑倍增,以\(ST\)表的思路优...原创 2019-05-04 10:21:00 · 112 阅读 · 0 评论 -
[NOI2002] 银河英雄传说
题目链接: 点我 题目分析: 带权并查集的题,记一个\(d\)数组维护每个战舰前面有多少战舰,再在每个树根上记录一个集合大小\(sum\),每次进行\(get_father\)的时候维护一下\(d\)数组,合并的时候更新集合大小。由于写了路径压缩,每次合并的时候还要把之前集合的\(sum\)更新到\(d\)数组上。 代码: #include<bits/stdc++.h> #...原创 2019-01-28 00:29:00 · 66 阅读 · 0 评论 -
[洛谷]P1505 [国家集训队]旅游
题目链接: 传送门 题目分析: 树剖板,支持单点修改,区间取反,区间求最大值/最小值/和 区间取反取两次等于没取,维护一个\(rev\ tag\),每次打标记用\(xor\)打,记录是否需要翻转,\(push\_down\)里判一下如果要取反就\(-=2 * sum(p)\),容易发现新最大值是原最小值的相反数,最小值同理 细节挺多的,看代码 代码: #include <bi...原创 2019-07-08 22:57:00 · 99 阅读 · 0 评论 -
线段树基本操作
支持单点修改区间求gcd 因为\(gcd\)满足交换律和结合律,所以和维护区间和没什么区别…… 支持区间修改区间求gcd 因为求\(gcd\)有一个辗转相减法,所以有一个\(gcd(a,b)=gcd(b-a,a)\),推广到多个数也成立。具体证明在fsy神仙的博客里有写(转载的gsj学长的……) 所以对于这个序列维护一个差分数组(记为\(sum\)),这样区间加的时候只需把\(d\)加在\(...原创 2019-01-27 10:08:00 · 77 阅读 · 0 评论 -
[洛谷P4315] 月下”毛景“树
题目链接: 点我 题目分析: 树剖。将边权下放到下方点上(为什么要选深度更深的点?一个父亲可能对应多个儿子,但一个儿子只有一个父亲,即可以保证每个点只保存一条边权)成为经典点权+树剖裸题 注意链计算时不能把LCA算进去,其余细节较多,具体见代码。 代码: #include<bits/stdc++.h> #define N (100000 + 5) #define inf (...原创 2019-06-20 15:44:00 · 88 阅读 · 0 评论 -
[洛谷P3258] [JLOI2014]松鼠的新家
题目链接: 点我 题目分析: 树链剖分 每一次按顺序走到下一个点可以看作沿途的点权+1,注意出发时的点不能+1 代码: // luogu-judger-enable-o2 #include<bits/stdc++.h> #define N (600000 + 5) using namespace std; inline int read() { int cnt = ...原创 2019-06-27 16:12:00 · 71 阅读 · 0 评论 -
[洛谷P3950] 部落冲突
题目链接: 点我 题目分析: 树剖。 考虑把边权下放到点上进行染色,连通是0,不连通是1,然后有两种处理思路: 维护区间颜色段总数(参考另一篇题解:染色),每次查询判断整段内是否只有一种颜色,若是,判断是否是全连通(可能是全不连通) 维护区间最大值,若是0说明是全连通,若是1说明有不连通边 和染色一样,注意跳过LCA 代码: #include<bits/stdc++.h>...原创 2019-06-27 16:54:00 · 173 阅读 · 0 评论 -
主席树[可持久化线段树]学习笔记
一句话算法: 主席树,又名可持久化线段树,是一种基于前缀和思想对历史版本进行保存,可支持单点修改,查询某个历史版本下某位置的值的数据结构。 主要思想: 对于我们上面加粗的命题,我们先考虑暴力的做法: 对于每一个历史状态,建立一棵线段树维护当前状态的信息。 然后你会发现,状态转移和空间耗损都非常巨大,(边\(MLE\)边\(TLE\)的感觉怎么样)你将会得到一个\(TM(LE)^2\)的结...原创 2019-07-05 23:01:00 · 149 阅读 · 0 评论 -
[洛谷P4185] [USACO18JAN]MooTube
题目链接: 传送门 题意: 给定一颗N个节点的树,定义两点距离为他们之间路径中边权最小值。 Q次询问K,V,询问到V距离>=K的点有多少(不含V) 呃呃呃呃考试的时候直奔了T3,结果公式推挂了(。。)最后5min回来搞T1,看出了正解然而手速跟不上…… 分析: 把所有的询问先离线下来存在一个结构体里并记录顺序(以便输出),然后分别把边和询问按w和k从大到小排序 用一个循环扫询...原创 2019-01-26 15:45:00 · 101 阅读 · 0 评论