随笔分类 -  数据结构

摘要:P4338 [ZJOI2018]历史 P3703 [SDOI2017]树点涂色 题解 将这两题放在一起,因为他们有十分显然的共同之处。 题意: [ZJOI2018]历史 给出一棵树,给定每一个点的access次数,计算轻重链切换次数的最大值,access次数每次询问单点修改。 [SDOI2017]树 阅读全文
posted @ 2020-06-29 21:56 Hygebra 阅读(244) 评论(0) 推荐(0)
摘要:正确的树分块做法 这是一种本题对所有树都适用的树分块做法。 前置:优化思路 树分块的瓶颈在于,当树为菊花图时,访问的联通块比较多。本质上说,单次询问访问了许多边,个数为$O(n)$。 所以想办法使得不再访问那么多边。 正题:做法 我们对原树进行分块,一定要保证是块内连通,设块的大小为$O(S)$。 阅读全文
posted @ 2020-01-11 13:20 Hygebra 阅读(426) 评论(0) 推荐(1)
摘要:思路 可以考虑另一种想法:因为我们发现,答案是肯定不会大于在原来的树上的最短路径的。所以原来的最短路是(有可能的)最大值! 我们把树变成这样,提取出1~n的路径,方便观看撕烤: (它有个我起的名字,叫灯笼树态,处理树上路径与其余部分之间的关系时画图用,并非真实的数据结构) 我们称被提取出来的树上路径 阅读全文
posted @ 2019-10-21 09:54 Hygebra 阅读(221) 评论(0) 推荐(1)
摘要:纯数据结构题,没有思维难度。直接用线段树求最大子段和的方法完成树上路径的合并。注意链上合并顺序要符合序列的前后顺序。 #include <cstdio> #include <cstring> #define cd w<<1 const int S=200030; int n,Q,h[S],v[S], 阅读全文
posted @ 2019-07-07 11:50 Hygebra 阅读(207) 评论(0) 推荐(0)
摘要:题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目。 第 2 行包含 N 个数字,描述初始时的数 阅读全文
posted @ 2019-06-16 12:21 Hygebra 阅读(178) 评论(0) 推荐(0)