数据结构
文章平均质量分 65
ww140142
wwwwwww
展开
-
bzoj-2594 水管局长数据加强版
题意:给出一个n个点m条边的无向图,边上有权值;Q次询问,每次有两种操作:1.求x,y两点路径上的最大值的最小值;2.删除一条边;保证删除的边存在,保证图时刻连通,保证不会出现重边和自环;n≤100000,m≤1000000,Q≤100000;题解:这是一个动态图问题,但是由于询问操作的特殊性,我们也可以转化到树上做;仔细看看不就是带删边的货车运输吗!原创 2015-08-19 12:14:09 · 1001 阅读 · 0 评论 -
bzoj-2599 Race
题意:给出一棵n个点的树,每条边有一个权值;求一条路径,权值和等于K,且边的数量最小;n题解:没数据范围的坑爹题;此题O(nlog^2n)是过不了的,要O(nlogn)的算法;注意K的范围!首先将树分治,答案一定在过根的某条链上;那么统计子树之间的长度加和为K的链经过的边数;因为K较小所以直接开一个数组记录长度为x的链最小经过了多少条边就可以了;原创 2015-10-21 11:05:35 · 1247 阅读 · 0 评论 -
bzoj-1136 Arc
题意:此题为一道交互题;给出一个长度为n的序列,求长度为k的字典序最大的子序列;n题解:这道题建议去Poi官网提交;BZ不支持交互把这题弄成了sb题;在官网的内存限制是32MB,并不能存下长度为n的数组;所以这道题是一个伪在线题目;首先最基础的离线问题怎么解?从[1,n-k+1]选最大的做第一个,然后从[第一个+1,n-k+2]选第二个...选到n个原创 2015-09-17 21:55:27 · 1564 阅读 · 0 评论 -
bzoj-1135 Lyz
题意:初始时滑冰俱乐部有1到n号的溜冰鞋各k双,x号脚的人可以穿x到x+d的溜冰鞋,;有m次操作,每次包含两个数ri,xi,代表来了xi个ri号脚的人(xi可能为负);对于每次操作,输出溜冰鞋是否足够;n题解:首先这是一个二分图匹配问题,显然鞋和人是没有交集的;然后就有一个Hall定理:二部图G中的两部分顶点组成的集合分别为X, Y;边集中有一组无公共点原创 2015-09-17 07:29:00 · 1352 阅读 · 0 评论 -
bzoj-3585 mex
题意:给出一个长度为n的自然数序列,m次查询某一区间[l,r]中数集的mex函数值;n,m题解:mex这个东西似乎并不能直接用某些数据结构维护;首先实际上a[i]太大是没有用的,因为如果在首页数字中隔开了一段,那么比那个数大的数不可能对答案有影响;这样我们就相当于将所有数离散到了200000的级别;然后利用莫队算法维护当前区间数的集合, 那之后就是查询第一个未覆原创 2015-10-23 10:12:24 · 1562 阅读 · 0 评论 -
SPOJ QTREE 1-3题解
昨天刷了几道QTREE,感觉码长萌萌哒;然而因为本人太弱刷不动QTREE4,动态点分治并没有理解上去的能力;于是暂且弃疗啦,在这里写点题解扔点代码吧;QTREE1题意:给出一个有边权的树;操作一:改变某条边权;操作二:查询两点之间路径上最大边权;题解:树链剖分的姿势还是挺裸的,想了想没有什么好办法码了一发;普通的树链剖分维护树上路径,加一个线原创 2015-10-22 14:05:57 · 1956 阅读 · 0 评论 -
bzoj-2083 Intelligence test
题意:给出一个长度为n的序列A,和m个序列Bi;求每个Bi是否为A的子序列;1题解:这题听起来是sb题但是算法还是挺有趣。。(给自己不会找个借口)一个个判B串是否满足显然是T的,因为每次都要遍历A;所以考虑仅遍历一次A串;将所有B串存成链表的形式,插在Bi首字母的链表头里;然后枚举A串,扫一遍当前的A[i],对所有B串去掉头(smg)之后放到下一个链原创 2015-09-20 21:19:17 · 1406 阅读 · 0 评论 -
poj-3740 Easy Finding
题意:给出一个n*m的01矩阵,选择其中的一些行,来精确覆盖每一列;只需要输出是否存在解即可;n题解:DLX裸题,利用双向十字链表优化搜索中的回溯问题;因为每一列上都只能有且仅有一个1,所以如果某一列上已经有了1,那么这一列上有1的其他行也可以被删除;根据这个思想是我们有了一个很厉害的剪枝条件,但是如果直接在矩阵中删除速度太慢,要求空间太多;所以就有了这种支原创 2015-11-11 08:03:27 · 1420 阅读 · 1 评论 -
bzoj-2001 City 城市建设
题意:给出一个n个结点m条边的带权无向连通图,有q次操作;每次操作是修改一个边的权值,要求每次操作后输出这个图中最小生成树的权值和;n题解:网上题解都是那些鬼畜的分治做法,每层求最小生成树将问题缩小到可以接受的范围;不过那个方法不好理解并且难以推广,所以wyfcyx大爷提出了一种更加让人愉悦的做法;首先这个问题不能直接用LCT维护,因为当删去一条边(边的权值变大原创 2015-11-11 13:08:04 · 1832 阅读 · 0 评论 -
bzoj-2527 Meteors
题意:有一个星球,它的轨道被划分成m份,由n个国家占领;一个国家可能占领多个轨道段;现有q次事件,每次在一个轨道区间上每段落下Ai量的流星雨;每个国家需要一定量的流星雨,当然它所得的为它占领的轨道段所得之和;求每个国家所需的东西什么时候可以满足,如果始终不能满足输出NIE;题解:这题我第一眼看成了输出TAK或NIE;结果仔细看看我选择死亡;边处理事件边判原创 2015-09-22 16:08:16 · 1444 阅读 · 0 评论 -
bzoj-3123 森林
题意:给出一个n个点m条边的森林,每个点有一个点权,有两种操作;1.查询两点之间的第K小的点权,保证合法;2.连边(x,y);m题解:论正确姿势的重要性;首先询问和某道COT的题很像,而这道题中多了Link操作;然而,那道COT的题我是用树链剖分写的。。。一开始的脑洞是每次将小的暴力重构作为一个轻链连在大的树上,然后每隔一段时间重构一次大树;听起来十分暴原创 2015-10-21 10:50:48 · 1303 阅读 · 0 评论 -
bzoj-3207 花神的嘲讽计划Ⅰ
题意:给出一个长度为n的序列,有m个询问;每次给出一个区间[l,r]和一个长度为K的短序列;查询区间中是否存在这个子串;1题中所有数据不超过2*10^9;保证方案序列的每个数字题解:这题我读了好几遍没读懂,看了题解才知道这问的是查询一个固定长度的字符串是否在区间出现;然后就是简单题了,用Hash来搞;处理原串中所有的Hash值,然后如果[l,r]存在一个原创 2015-09-30 21:00:02 · 906 阅读 · 0 评论 -
bzoj-3091 城市旅行
题意:给出一颗树,点上有初始权值,有四种操作;1.加一条边;2.删一条边;3.一条路径上的点都加一个权值;4.查询一条路径上任取两个点的路径上期望权值和;题解:本题是2752的升级版,一些公式之类的东西参照上题;到了树上之后,实际上本质的公式是没有变的,只有一些外在的形式改变了;因为Splay维护的是树上的重链,那么结点维护的就是链上的答案等东西;转原创 2015-08-18 21:40:21 · 1190 阅读 · 0 评论 -
bzoj-3669 魔法森林
题意:给出一个n个点m条边的无向图,现在要从点1走到点n;每条边有两个参数a和b,经过这条边必须分别要带不小于a和b的两种权值;求携带的最小ab权值和,若无解输出-1;2题解:挺神的一道题。。考虑路径上最小的b的权值,只需要对b做一次最小生成树就可以了;但是a的权值怎么办呢?枚举!枚举每次经过的最大的a权值,然后求b的最小生成树,更新答案;但是为原创 2015-08-19 19:51:33 · 1037 阅读 · 0 评论 -
bzoj-2151 种树
题意:给出一个n个点的环,每个点有一个有正有负的权值;现要在其中选出m个互不相连的点,使权值和最大;对于85%的数据:n对于100%的数据:n题解:论如何出一道大家都开心的题;只要给暴力85分就好啦!贪心的取可以取的最大权值肯定不行,所以考虑动态规划;对于动态规划的状态,一定要有前i个这个状态,也不能省略选了j个的记录;所以设f[i][j]为原创 2015-09-10 21:30:24 · 1821 阅读 · 0 评论 -
bzoj-3545 Peaks
题意:给出一个n个点m条边的无向图,点和边都有权值;q次询问从某个点出发,经过不超过x的权值的边能到达的第k大点权值;1权值题解:题意略鬼畜。。。首先能看出来走的边一定是在最小生成树上,然后这并没有什么卵用;不过至少提供了一点思路,剩下思路就是将询问离线了;离线之后可以做到一次遍历边表,顺便的求出所有的答案值;对于每次的询问,答案就是那个点所在连通块原创 2015-09-28 22:24:55 · 1697 阅读 · 1 评论 -
hdu-5481 Desiderium
题意:给出一个区间的集合,求所有集合子集中区间并的长度和;集合大小题解:这次BC打的几乎是爆炸的。。没掉出DIV1真是万幸啊;T1我逗比的写了一个线段树还SB的不对,发现不对劲已经半个小时了;扔了T1搞T2还调了半天结果-5,觉得滚粗就走人啦;言归正传,这题直接考虑显然是不行的,所以考虑离散之后统计每个小区间的贡献;先累加每个区间覆盖次数,直接上个线段树搞;原创 2015-09-27 19:43:42 · 1186 阅读 · 1 评论 -
bzoj-1125 Poc
题意:给出n个字符串,长度均为len;有m次操作,每次将两个字符交换;求每个字符串在任何时点上,与相同的它最多的字符串个数;n题解:Poi!字符串长度很小,我们先考虑到用Hash来判断字符串的相同;这些部分很简单,但是统计任意时点对某个字符串的答案是很难的;因为如果暴力更新的话复杂度是O(nm),所以不能这么搞;而延迟更新也没有什么好办法,只能去找打原创 2015-09-14 11:17:32 · 1508 阅读 · 0 评论 -
bzoj-2741 L
题意:给出一个长度为n的序列;m次查询区间[l,r]子区间的最大异或和;强制在线;n题解:这诡异的数据范围以及诡异的复杂度。。FOTILE——中国高端数据结构领导者;如果不考虑区间问题,那么就可以用可持久化Trie树解决;具体就是求出前缀区间和,插入到可持久化Trie里,然后就是选两个数异或和最大的问题了;多了一个区间限制之后,如果暴力查,那么是O(原创 2015-09-29 23:02:56 · 1232 阅读 · 3 评论 -
bzoj-2212 Tree Rotations
题意:给出一个二叉树,叶子结点上有权值;共有n个叶子结点,权值分别为1-n;现可将所有结点的左右儿子交换,求最小的逆序对数;2题解:这题读入有点鬼畜,但是写起来还是比较优雅的;考虑到一个结点的子树具体形态与它是否和它的兄弟交换是无关的;所以我们可以像分治一样,先计算子树之间的最小逆序对数;然后将所有的权值扔到一个线段树中,向它的父亲传递;它的父亲是没原创 2015-09-30 11:18:35 · 1282 阅读 · 0 评论 -
bzoj-1112 砖块Klo
题意:给出一个长度为n的数列,现要将其连续k个数变成一样的;每次可以对一个数+1或-1,问最小操作次数;1题解:感觉是一道好题吧;首先有这样一个结论:将这些数置为中位数所需要的操作数最小;证明啥的网上关于中位数的一大堆?反正我不会;然后我们要做的就是:1.动态维护区间中位数;2.对一个区间更新答案;有的同学选择了平衡树解决。。实际上这个题用权原创 2015-09-15 07:42:17 · 1699 阅读 · 0 评论 -
bzoj-2259 新型计算机
题意:给出一个长度为n的非负序列,将一个元素a修改为A的的代价是|a-A|;求最小的代价使序列合法 (合法的概念参照原题);1题解:这道题据说要卡O(nlogn),然而我依然选择用O(n*玄学)的算法AC了此题[滑稽];我们可以很容易的得到一个O(n^2)的算法;设f[i]为从i开始到序列末尾使序列合法所花费的最小代价,A[i]为i+a[i]+1;转移即为f原创 2015-10-27 08:32:30 · 1010 阅读 · 0 评论 -
bzoj-2276 Temperature
题意:给出n段区间[li,ri];求一个最长的连续区间串,满足存在一个不降序列Ai,且Ai∈[li,ri];1题解:感觉Poi题越来越难了。。。这sb题都错成狗。。我眼一花把范围看成了10W,然后YY了一个线段树;用线段树来维护所有点的DP值,然后直接DP乱搞;时间复杂度O(nlogn),空间复杂度O(nlogn);然后我调了一下午,发现T了;之后我原创 2015-09-23 16:58:36 · 1463 阅读 · 0 评论 -
poj-3321 Apple Tree
题意:给定一棵有根树,开始时每个节点有苹果;有两种操作 C x :使x节点的状态改变,有果子变成没有,没有就变成有;Q x:查询x节点子树上的果子总数;n,m题解:范围显然不能爆搜,所以我们在求和的时候不能枚举;可以想到用树状数组来维护和;所以基本想法就是使子树们各自在一个区间上,然后树状数组维护;制作这个区间就用dfs,回溯时正好记录了整棵子树的信息;原创 2015-04-30 14:58:54 · 794 阅读 · 0 评论 -
bzoj-2051 A Problem For Fun
题意:给出一棵n个结点的树,边上有权值;对于每个点求离它第k小的距离;n题解:正解似乎是树分治维护距离,然后二分答案啥的,时间复杂度O(nlog^3);但是如果想不到树分治怎么办呢?那么就来写一个逗比做法吧!考虑从一个点转移到另外一个点,这个转移过程对于一些点是增加这条边的权值,另一些是减少这条边的权值;而投影到DFS序上,就是对于子树区间的加减修改;从原创 2015-11-26 12:56:54 · 1400 阅读 · 0 评论 -
bzoj-3676 回文串
题意:给出一个长度为n的字符串,求它的某个回文子串长度乘出现次数的最大值;n题解:据说这题用回文自动机回文树之类的东西有一些更优的解法?然而回文自动机似乎是在这题之后被引入OI的23333;所以还有一些听起来比较靠谱的解法。。我们先考虑求出所有的回文子串,由于一些原因这些本质不同的回文子串最多有O(n)个;利用manacher算法算出每个回文子串的位置与长度原创 2015-11-16 20:18:17 · 2038 阅读 · 0 评论 -
bzoj-1180 OTOCI
题意:给出n个结点,每个点上有一个点权;有三种操作,共m次;1.连接两个点,如果已经在一个连通块中则忽略此操作;2.修改某个点的点权;3.查询两个点之间点权和;n假装强制在线;题解:很久以前写过这道题的LCT解法,因为这么做太傻逼就没写题解;不过因为一些奇 怪的原因我又用一种奇 怪的方法写了一遍这题,所以来发篇题解咯;【首先假设我们都不会LCT】原创 2015-12-01 20:33:17 · 744 阅读 · 0 评论 -
bzoj-3307 雨天的尾巴
题意:给出一个n个点的树,有m个事件;每次是将x到y的路径上所有点都投放一个z的物品;求最后每个点上那个物品最多;n,m题解:一道数据结构好题;首先这道题问的是最终答案,那么把所有事件离线下来处理;考虑如果树是一条链,那么对于这样一个序列问题怎么做?将左端点x设置z数量加一,右端点y设为z数量-1;然后用一个权值线段树去扫整个序列,查询最大值即为答案原创 2015-09-22 20:36:56 · 2849 阅读 · 0 评论 -
CF286D/bzoj-4223 Tourists
题意:直角坐标系下,在一些时刻会有两个游客分别同时从点 (−1, 0) 和 (1, 0) 出发;每一对游客每秒都向 y 轴正方向前进一个单位长度;在一些时刻墙会出现,墙 (li,ri) 是一条在点 (0,li) 和(0,ri) 之间的线段;给出 m 堵墙的出现时间 ti 以及出现的区间,给出 n 对游客出发时间 qi;请求出对于每一对游客有多长时间无法彼此望见。n,m原创 2015-12-04 14:10:00 · 1435 阅读 · 0 评论 -
Contest Hunter - IHHH
题意:给出n个字符串和m个询问;每个询问有l,r和一个字符串;查询[l,r]区间中的所有是询问字符串的子串的最大长度;n此题为CH【弱省胡策】 #1 T2;题解:一道好题,感觉正解说起来只是一句话但是真是很有道理。。就是说:将询问拆成log个区间,对线段树每个结点建AC自动机分别处理;这样每个询问都只询问了log个区间,每个字符串也只被log个结点覆原创 2016-02-27 15:04:04 · 1782 阅读 · 1 评论 -
bzoj-4551 [Tjoi2016&Heoi2016]树
题意:给出一棵树,有两种操作:C x:标记点x;Q x:查询某个点的最近被标记祖先;n,m题解:首先我们发现如果标记了一个点,其影响是对于个子树,也就是一段DFS区间的;那么我们可以转化成一个序列上的问题:区间加入一个值,单点查询最大值;然后直接标记永久化搞个线段树套set就可以了,时间复杂度O(nlog^2n);【我怎么突然感觉不用套set直接维护最小原创 2016-05-10 22:24:54 · 1196 阅读 · 0 评论 -
bzoj-3809 Gty的二逼妹子序列
题意:给出一个长度为n的数列,每个数字在[1,n]内;m次询问,查询[l,r]区间中值在[a,b]中的数字种类数;n内存限制为28M题解:出题人实在太丧病系列;莫队算法+树状数组这个比较显然吧;码了一发交上去MLE了,砍了砍内存的常数,还是MLE;然后发现询问里不能记录左端点所在块。。。在cmp里现求是吗。。。改完T了!加完读入优化还是T!没原创 2015-08-06 14:31:52 · 1012 阅读 · 0 评论 -
jdfz-2978 第k短路(强)
题意:给出一个n个点m条边的有向图,求这个图点1到点n的严格第K短路;n边权链接题解:这是一个似乎十分经典的问题,但是普通的A*算法是会被卡的;最坏复杂度会达到O(SPFA(n,m)+KMlog(K+M))的(大概);所以这个算法还需要优化;主要的算法就是俞鼎力大牛在《堆的可持久化》论文里的东西;具体的解法详见论文;只是我使用了可持久化左偏树原创 2015-08-27 10:25:35 · 1668 阅读 · 0 评论 -
bzoj-2555 SubString
题意:给出一个字符串和m次操作;每次有两种操作,"ADD"在串后面再加入一个串,"QUERY"查询询问串在整个字符串出现了多少次;强制在线;题解:考虑对原串构建后缀自动机,并利用其为增量法构建的原理维护"ADD"操作;然后因为这是一个自动机,所以它可以用来识别原串所有的后缀,当识别未完成时,得到的就是一个子串;那么当延trans指针走了自动机上的某个状态,这个状原创 2015-11-19 22:28:58 · 1766 阅读 · 0 评论 -
bzoj-1095 Hide 捉迷藏
题意:给出一棵树,初始所有结点都是白的;操作有两种:1.修改一个结点的颜色;2.查询当前树上任意两个白点的最远距离;n题解:算是把当年挖下的一个大坑填了一半吧。。。SPOJ的QTREE4又爆栈又卡常,姿势太丑过不去就先算了= =树上最远点对的经典解法是用树的点分治来搞;这次多了修改,那么就要动态的维护这个点分治;具体来说,首先将树分治,然后从下一原创 2015-11-13 14:37:06 · 1348 阅读 · 0 评论 -
poj 3076 Sudoku
题意:给出一个16*16的数独,要求你将其补全;数据保证给出的数独有且仅有一个解;题解:数独毕竟是数独,并不像今年NOIP考的那个幻方那样有构造方案;显然这种看上去就很难的问题我们只能靠人类智慧或者用力暴搜;朴素的搜索就是每一个格子试探性的填入每一个数,然后递归进行直到找到一组解或者不能按照规律进行时停止;而为了解决数独问题,我们可以将其转化成精准覆盖问题来解决原创 2015-11-12 16:14:59 · 1234 阅读 · 0 评论 -
bzoj-1941 Hide and Seek
题意:给出平面上n个点,求距离每个点最大距离减最小距离(不算自己)的最小值;n题解:今天写了两道KDTree然而另一道被常数卡飞。。所以就写这个不需要重构的题解吧;虽说如此但是这毕竟还是裸题啊。。KD树在实现的时候需要注意一些问题。。就是每次到了下一个深度都要换一个不同的比较函数来进行排序建树;否则似乎就变成和线段树/平衡树一样的东西了,那样剪枝的效果会大大原创 2015-11-20 22:34:27 · 1601 阅读 · 0 评论 -
bzoj-2743 采花
题意:给出一个长度为n的序列,m次查询区间[l,r]中出现两次的数的种类数;n,m题解:一开始看出来数据范围。。少看一个0;于是写了一发莫队,O(n√n)直接TLE掉;这题正解当然是O(nlogn)的算法咯,和HH的项链那道题的思想确实很相似;我们记录与第i个数相同的最后一个数下标为pre[i];将询问离线,按r端点排序,每扫到一个点i就回答r端点为i的所有原创 2015-10-15 16:44:51 · 1421 阅读 · 0 评论 -
bzoj-1535 Sza-Template
题意:给出一个长度为n的字符串,求用它的一个子串作为模板能粘贴出整个字符串的最小长度;n题解:首先我们可以知道,这个模板串一定是既为原串的一个前缀也为它的一个后缀的,否则并不能拼出来这个字符串那么利用KMP或AC自动机构建出fail树,答案只可能出现在树中(root,n]这条路径上;那么问题就是:枚举树上的每一个点(也是串中的一个前缀),判断它是否能覆盖整个字符串,原创 2015-10-30 16:17:28 · 1796 阅读 · 3 评论 -
bzoj-3238 差异
题意:给出一个长度为n的字符串;求这个字符串任意两个后缀的LCP的和;n题解:问题啥的说成这样就可以嘛= =,那些奇怪的加加减减有啥意义;这道题是求和,而枚举i,j,利用后缀数组+RMQ可以O(n^2logn),但是依然不行;考虑到LCP是两个串之间height的最小值,那枚举LCP的值可以吗?对于一个height[i]来说,它的值可以影响到它两段heigh原创 2015-09-04 21:53:19 · 799 阅读 · 0 评论