国家集训队2009论文集分治算法在树的路径问
NOI国家集训队论文分类(至2008)(摘抄自C博客)
摘抄自C博客组合数学计数与统计2001 - 符文杰:《Pólya原理及其应用》2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》2007 - 周冬:《生成树的计数及其应用》2008 - 陈瑜希《Pólya计数法的应用》数位问题2009 - 高逸涵《数位计数问题解法研究》2009 - 刘聪《浅谈数位类统计问题》动态统计2004 - 薛矛:《解决动态统计问题的两把利刃》2007 - 余江伟:《如何解决动态统计问题》博弈2002 - 张一飞:《由感性认识到理性认识——透析一类搏弈游戏的解答过程》2007 - 王晓珂:《解析一类组合游戏》2009 - 曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》2009 - 方展鹏《浅谈如何解决不平等博弈问题》2009 - 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》母函数2009 - 毛杰明《母函数的性质及应用》拟阵2007 - 刘雨辰:《对拟阵的初步研究》线性规划2007 - 李宇骞:《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》置换群2005 - 潘震皓:《置换群快速幂运算研究与探讨》问答交互2003 - 高正宇:《答案只有一个——浅谈问答式交互问题》猜数问题2003 - 张宁:《猜数问题的研究:<聪明的学生>一题的推广》2006 - 龙凡:《一类猜数问题的研究》数据结构数据结构2005 - 何林:《数据关系的简化》2006 - 朱晨光:《基本数据结构在信息学竞赛中的应用》2007 - 何森:《浅谈数据的合理组织》2008 - 曹钦翔《数据结构的提炼与压缩》结构联合2001 - 高寒蕊:《从圆桌问题谈数据结构的综合运用》2005 - 黄刚:《数据结构的联合》块状链表2005 - 蒋炎岩:《数据结构的联合——块状链表》2008 - 苏煜《对块状链表的一点研究》动态树2006 - 陈首元:《维护森林连通性——动态树》2007 - 袁昕颢:《动态树及其应用》左偏树2005 - 黄源河:《左偏树的特点及其应用》跳表2005 - 魏冉:《让算法的效率“跳起来”!——浅谈“跳跃表”的相关操作及其应用》2009 - 李骥扬《线段跳表——跳表的一个拓展》SBT2007 - 陈启峰:《Size Balance Tree》线段树2004 - 林涛:《线段树的应用》单调队列2006 - 汤泽:《浅析队列在一类单调性问题中的应用》哈希表2005 - 李羽修:《Hash函数的设计优化》2007 - 杨弋:《Hash在信息学竞赛中的一类应用》Splay2004 - 杨思雨:《伸展树的基本操作与应用》图论图论2005 - 任恺:《图论的基本思想及方法》模型建立2004 - 黄源河:《浅谈图论模型的建立与应用》2004 - 肖天:《“分层图思想”及其在信息学竞赛中的应用》网络流2001 - 江鹏:《从一道题目的解法试谈网络流的构造与算法》2002 - 金恺:《浅谈网络流算法的应用》2007 - 胡伯涛:《最小割模型在信息学竞赛中的应用》2007 - 王欣上:《浅谈基于分层思想的网络流算法》2008 - 周冬《两极相通——浅析最大—最小定理在信息学竞赛中的应用》最短路2006 - 余远铭:《最短路算法及其应用》2008 - 吕子鉷《浅谈最短径路问题中的分层思想》2009 - 姜碧野《SPFA算法的优化及应用》欧拉路2007 - 仇荣琦:《欧拉回路性质与应用探究》差分约束系统2006 - 冯威:《数与图的完美结合——浅析差分约束系统》平面图2003 - 刘才良:《平面图在信息学中的应用》2007 - 古楠:《平面嵌入》2-SAT2003 - 伍昱:《由对称性解2-SAT问题》最小生成树2004 - 吴景岳:《最小生成树算法及其应用》2004 - 汪汀:《最小生成树问题的拓展》二分图2005 - 王俊:《浅析二分图匹配在信息学竞赛中的应用》Voronoi图2006 - 王栋:《浅析平面Voronoi图的构造及应用》偶图2002 - 孙方成:《偶图的算法及应用》树树2002 - 周文超:《树结构在程序设计中的运用》2005 - 栗师:《树的乐园——一些与树有关的题目》路径问题2009 - 漆子超《分治算法在树的路径问题中的应用》最近公共祖先2007 - 郭华阳:《RMQ与LCA问题》划分问题2004 - 贝小辉:《浅析树的划分问题》数论欧几里得算法2009 - 金斌《欧几里得算法的应用》同余方程2003 - 姜尚仆:《模线性方程的应用——用数论方法解决整数问题》搜索搜索2001 - 骆骥:《由“汽车问题”浅谈深度搜索的一个方面——搜索对象与策略的重要性》2002 - 王知昆:《搜索顺序的选择》2005 - 汪汀:《参数搜索的应用》启发式2009 - 周而进《浅谈估价函数在信息学竞赛中的应用》优化2003 - 金恺:《探寻深度优先搜索中的优化技巧——从正方形剖分问题谈起》2003 - 刘一鸣:《一类搜索的优化思想——数据有序化》2006 - 黄晓愉:《深度优先搜索问题的优化技巧》背包问题2009 - 徐持衡《浅谈几类背包题》匹配2004 - 楼天城:《匹配算法在搜索问题中的巧用》概率概率2009 - 梅诗珂《信息学竞赛中概率问题求解初探》数学期望2009 - 汤可因《浅析竞赛中一类数学期望问题的解决方法》字符串字符串2003 - 周源:《浅析“最小表示法”思想在字符串循环同构问题中的应用》多串匹配2004 - 朱泽园:《多串匹配算法及其启示》2006 - 王赟:《Trie图的构建、活用与改进》2009 - 董华星《浅析字母树在信息学竞赛中的应用》后缀数组2004 - 许智磊:《后缀数组》2009 - 罗穗骞《后缀数组——处理字符串的有力工具》字符串匹配2003 - 饶向荣:《病毒的DNA———剖析一道字符匹配问题解析过程》2003 - 林希德:《求最大重复子串》动态规划动态规划2001 - 俞玮:《基本动态规划问题的扩展》2006 - 黄劲松:《贪婪的动态规划》2009 - 徐源盛《对一类动态规划问题的研究》状态压缩2008 - 陈丹琦《基于连通性状态压缩的动态规划问题》状态设计2008 - 刘弈《浅谈信息学中状态的合理设计与应用》树形DP2007 - 陈瑜希:《多角度思考创造性思维——运用树型动态规划解题的思路和方法探析》优化2001 - 毛子青:《动态规划算法的优化技巧》2003 - 项荣璟:《充分利用问题性质——例析动态规划的“个性化”优化》2004 - 朱晨光:《优化,再优化!——从《鹰蛋》一题浅析对动态规划算法的优化》2007 - 杨哲:《凸完全单调性的加强与应用》计算几何立体几何2003 - 陆可昱:《长方体体积并》2008 - 高亦陶《从立体几何问题看降低编程复杂度》计算几何思想2004 - 金恺:《极限法——解决几何最优化问题的捷径》2008 - 程芃祺《计算几何中的二分思想》2008 - 顾研《浅谈随机化思想在几何问题中的应用》圆2007 - 高逸涵:《与圆有关的离散化》半平面交2002 - 李澎煦:《半平面交的算法及其应用》2006 - 朱泽园:《半平面交的新算法及其实用价值》矩阵矩阵2008 - 俞华程《矩阵乘法在信息学中的应用》高斯消元2002 - 何江舟:《用高斯消元法解线性方程组》数学方法数学思想2002 - 何林:《猜想及其应用》2003 - 邵烜程:《数学思想助你一臂之力》数学归纳法2009 - 张昆玮《数学归纳法与解题之道》多项式2002 - 张家琳:《多项式乘法》数形结合2004 - 周源:《浅谈数形结合思想在信息学竞赛中的应用》黄金分割2005 - 杨思雨:《美,无处不在——浅谈“黄金分割”和信息学的联系》其他算法遗传算法2002 - 张宁:《遗传算法的特点及其应用》2005 - 钱自强:《关于遗传算法应用的分析与研究》信息论2003 - 侯启明:《信息论在信息学竞赛中的简单应用》染色与构造2002 - 杨旻旻:《构造法——解题的最短路径》2003 - 方奇:《染色法和构造法在棋盘上的应用》一类问题区间2008 - 周小博《浅谈信息学竞赛中的区间问题》序2005 - 龙凡:《序的应用》系2006 - 汪晔:《信息学中的参考系与坐标系》物理问题2008 - 方戈《浅析信息学竞赛中一类与物理有关的问题》编码与译码2008 - 周梦宇《码之道—浅谈信息学竞赛中的编码与译码问题》对策问题2002 - 骆骥:《浅析解“对策问题”的两种思路》优化算法优化2002 - 孙林春:《让我们做得更好——从解法谈程序优化》2004 - 胡伟栋:《减少冗余与算法优化》2005 - 杨弋:《从<小H的小屋>的解法谈算法的优化》2006 - 贾由:《由图论算法浅析算法优化》程序优化2006 - 周以苏:《论反汇编在时间常数优化中的应用》2009 - 骆可强《论程序底层优化的一些方法与技巧》语言C++2004 - 韩文弢:《论C++语言在信息学竞赛中的应用》策略策略2004 - 李锐喆:《细节——不可忽视的要素》2005 - 朱泽园:《回到起点——一种突破性思维》2006 - 陈启峰:《“约制、放宽”方法在解题中的应用》2006 - 李天翼:《从特殊情况考虑》2007 - 陈雪:《问题中的变与不变》2008 - 肖汉骏《例谈信息学竞赛分析中的“深”与“广”》倍增2005 - 朱晨光:《浅析倍增思想在信息学竞赛中的应用》二分2002 - 李睿:《二分法与统计问题》2002 - 许智磊:《二分,再二分!——从Mobiles(IOI2001)一题看多重二分》2005 - 杨俊:《二分策略在信息学竞赛中的应用》调整2006 - 唐文斌:《“调整”思想在信息学中的应用》随机化2007 - 刘家骅:《浅谈随机化在信息学竞赛中的应用》非完美算法2005 - 胡伟栋:《浅析非完美算法在信息学竞赛中的应用》2008 - 任一恒《非完美算法初探》提交答案题2003 - 雷环中:《结果提交类问题》守恒思想2004 - 何林:《信息学中守恒法的应用》极限法2003 - 王知昆:《浅谈用极大化思想解决最大子矩形问题》贪心2008 - 高逸涵《部分贪心思想在信息学竞赛中的应用》压缩法2005 - 周源:《压去冗余缩得精华——浅谈信息学竞赛中的“压缩法”》逆向思维2005 - 唐文斌:《正难则反——浅谈逆向思维在解题中的应用》穷举2004 - 鬲融:《浅谈特殊穷举思想的应用》目标转换2002 - 戴德承:《退一步海阔天空——“目标转化思想”的若干应用》2004 - 栗师:《转化目标在解题中的应用》类比2006 - 周戈林:《浅谈类比思想》分割与合并2006 - 俞鑫:《棋盘中的棋盘——浅谈棋盘的分割思想》2007 - 杨沐:《浅析信息学中的“分”与“合”》平衡思想2008 - 郑暾《平衡规划——浅析一类平衡思想的应用》。
分治算法在树的路径问题中的应用
1
IOI目录】
【序言】........................................................................................................................ 3 【正文】........................................................................................................................ 4 一.树的分治算法.................................................................................................... 4 基于点的分治:.............................................................................................. 4 基于边的分治:.............................................................................................. 4 效率分析:...................................................................................................... 5 【例 1】树中点对统计................................................................................... 8 算法分析................................................................................................... 8 【例 2】Free Tour 2 ...................................................................................... 10 算法分析................................................................................................. 10 【本节小结】................................................................................................ 13 二.树的路径剖分算法:................................................................................... 14 【例 3】Query On a Tree.............................................................................. 14 算法分析................................................................................................. 14 引入路径剖分......................................................................................... 14 轻重边路径剖分..................................................................................... 15 【例 4】黑白树 ........................................................................................... 17 算法分析................................................................................................. 17 【小结】........................................................................................................ 18 路径剖分与树的分治的联系:.................................................................... 19 【例 5】Query On a Tree Ⅳ ........................................................................ 20 算法分析................................................................................................. 20 【本节小结】................................................................................................ 23 三.树的分治的进一步探讨:........................................................................... 24 如何改进基于边的分治的时间复杂度........................................................ 24 使用基于边的分治解决【例 2】................................................................. 26 使用基于边的分治解决【例 5】................................................................. 27 四.全文总结....................................................................................................... 28 【参考文献】.............................................................................................................. 29 【感谢】...................................................................................................................... 29 【附录】...................................................................................................................... 29
国家集训队2009论文集信息学竞赛中概率问题
2 22
全文总览
样本空间 连续型随机变量 随机变量 离散型随机变量
SPOJ RNG SGU Random Shooting SRM 349 LastMarble UVA Randomness
3 22
要用到的定义
1 fi ( [x-Ri, j-Ri+1]x ) = ∫x R i R f i 1 ( t )dt [j-Ri+1,j] [j,x] i
x
P
P
f i1 (t )
f i (x)
19 22
j-Ri j-Ri+1
j j+1
t
j
j+1
x
本题总结
在解决本题的过程中,我们遇到了这样的困难: 在解决本题的过程中,我们遇到了这样的困难: N个随机变量代表着 维空间,较为抽象 个随机变量代表着N维空间 个随机变量代表着 维空间, 两个解法都从N较小的情况开始分析 较小的情况开始分析, 两个解法都从 较小的情况开始分析,发现规律
23 22
用归纳法, 用归纳法,当N=1时,V((0,+∞),x) = x显然 时 显然 符合结论. 符合结论. 设当N=2,3,…,k-1时都有结论成立,那么 时都有结论成立, 设当 时都有结论成立 N=k时,V([0,+∞), [0,+∞),…, [0,+∞),x)就是 时 就是 一个k维锥体的 维体积, 维锥体的k维体积 一个 维锥体的 维体积,椎体的底面面积 是 ( kx 1)! 同时我们知道体积就是截面面积的积分值, 同时我们知道体积就是截面面积的积分值, 而对与锥体的顶点距离为h的截面而言 的截面而言, 而对与锥体的顶点距离为 的截面而言,其 截面面积 (kx 1)! ( h ) 为,所以 所以 x x h 1 x x ( ) dh= ( 0) = V([0,+∞), [0,+∞),…, [0,+∞),x) = ∫ (k 1)! x (k 1)! k k! ■
【OI 国家集训队】对一类动态规划问题的研究
12 人
12
f2[1][3]
34
f1[1][3]
34 人
问题一
• 考虑f1[1][3],当前处于位置1。 • 可以由f1[2][3]沿着2->1走来。再
射落1号彩蛋。
12 人 12
人
34 34
问题一
• 考虑f1[1][3],当前处于位置1。 • 可以由f1[2][3]沿着2->1走来。再
射落1号彩蛋。 • 可以由f2[2][3]沿着3->1走来。再
小结
• 当前射击的费用受到之前决策的影响。 • 如果新增状态t表示过去决策的影响,状态数将会无法承受。 • 改变“时间观”,从过去考虑当前,即从当前考虑未来,把当前决
策对未来的影响算作当前决策费用,计算到当前状态。
将费用提前计算
当前决策 对未来“行动”
的费用影响 只与当前决策有关
将未来的费用 的一部分视作 当前决策费用 计算在当前的状态中
j 1
问题二
• 考虑如何计算R(1)。
• R(1)=R2*k+R3*k+C1 • =C1+C2*k+C3*k+R4*k2+R5*k2+R6*k2 • x对1的贡献为Cx*kd(x,1)。
1
×k
2
×k
×k
×k 3 ×k
4
5
6
×k
CX
问题二
• R(1)=
n
cik d (i,1)
j 1
• 每次修改都应该把点的后继直接设置为1。
2
3
4
点2的距离变成3
问题二
• 再加一维状态d,假设在未来的决策导致点i 的距离为d。
算法合集之分治算法在树的路径问题中的应用
R
MaxR Max{D(i) Dist(i, R)} L
R
Opt = 与此链的重合部分在[L,R]的路径的最大长度
Query On a Tree Ⅳ
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左 右两个儿子,区间[L,Mid]和[Mid+1,R]。我们可以得到如 下转移:
MaxL(P) Max{MaxL(Lc), Dist(L, Mid 1) MaxL(Rc)}
2.为了改进基于边的分治的最坏复杂度,我们 将一个结点个数为N的树改造成了一个结点个数为2N 的新树,自然增加了常数。
算法的常数
基于链的分治 基于点的分治 基于边的分治 未改进的 基于边的分治
N=100000 1.17s M=100000
1.78s
2.28s
2.13s
N=100000 2.35s M=500000
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左
右两个儿子,区间[L,Mid]和[Mid+1,R]。我们可以得到如
下转移:
Opt(Lc), Opt(Rc),
Opt(P) Max{
}
MaxR(Lc) MaxL(Rc) Dist (Mid, Mid 1)
Opt
L
R
Opt
L
L
Opt
R
R
Query On a Tree Ⅳ
树的路径问题 以路径为询问对象的题目
POJ1741,树中点对统计 SPOJ QTREE,FTOUR2,QTREE4 Astar2008复赛 黑白树
论文内容
一、树的分治算法 树的分治的两种常见形式:
二、基树于的点路的径分 剖治分算法 三、基树归于的纳边分为的治基分 算 于治法链的的进分一治步探讨
算法合集之《组合游戏略述——浅谈SG游戏的若干拓展及变形》
中国有句古话——“智者千虑,必有一失”,而组合游戏中的游戏者 却可以做到“运筹帷幄,决胜千里”。不得不说,正是组合游戏中的“智 者”吸引着我们去探索、发觉组合游戏中的魅力!
1.2 组合游戏中状态空间向图的转化
我们可以将组合游戏中的每一个状态抽象成图中的一个点,将每一 步决策抽象成图中的一条边。我们将这个图称为该组合游戏的游戏图。
这样,对于组合游戏中的每一次对弈,我们都可以将其抽象成游戏 图中的一条从某一顶点到出度为 0 的点的路径。
组合游戏向图的转化,并不单单只是为了寻找一种对应关系,它可
1《由感性认识到理性认识——透析一类搏弈游戏的解答过程 》,张一飞,国家集训队 2002 论文 2《解析一类组合游戏》,.王晓珂,国家集训队 2007 论文
第 1 页 共 24 页
IOI2009 中国国家集训队论文
贾志豪 石家庄二中
每一个模型都有详细的证明。大多数人在学习信息学时存在的问题是 “知其然,不知其所以然”,因为大多数的比赛模式是只要求结果而不 要求过程。但这会使我们对一个事物“只知表皮,不知深髓”,如果将 一个我们知道的问题稍加变形的话,我们可能就不会了。这个问题在组 合游戏中体现得尤其突出。因此笔者对于文中的每一个定理都给出了证 明,希望读者对文中的思想“知其然,知其所以然”。
显然不是!!!
因为我们不光要考虑算法的正确性,还要考虑算法的时空开销,而 上述方法显然没有考虑算法的时空开销,上述方法的瓶颈在于没有充分 利用 SG-组合游戏问题的特殊性质。
我们先引出游戏的和的概念。
算法合集之《数学归纳法与解题之道》
结构归纳法
结构归纳法是应用在数理逻辑、计算机科学、图论和一些其他数学领域中的一种特殊 化的数学归纳法,一般用来解决非线性问题。通俗地说,如果要证明的一组基于结构的命 题之间有一个“拓扑序”(通常定义为问题的规模),那么我们往往可以从空集出发进行 归纳证明或构造。例如,树形结构上我们每次去掉根将问题规约到几个较小的子问题,图 论算法中每次处理一条边就能不断减小问题的规模……如果对于一个规模足够小的问题我 们能够解决,我们就完美的解决了原问题。 不同于一般的数学归纳法,结构归纳法的正确性依赖于“最小数原理”的推广:假设 存在反例,那一定会有最小的反例,但是运用上述论证减小其规模可得一个反例,它的规 模比最小的反例更小,这样就产生了矛盾。因此假设不成立,结构归纳法是正确的。
基本的定理、概念与方法
第一数学归纳法
P 1 True 任意给定关于自然数的命题 P n ,若 ,那么,命题对所有 * P n P n 1 n N
自然数均成立。 形象地说, 如果把整个自然数集想象成一串多米诺骨牌, P 1 True 这个要求就推倒 了其中的第一块,因此有时被形象地称之为“奠基”;我们通常称为归纳的是其中证明
IOI2009 中国国家集训队论文 数学归纳法与解题之道 张昆玮
3
关于数学归纳法
简短的回顾
数学归纳法原理的发现可以追溯到公元 1494 年意大利数学家 Francesco Maurolico 的著作 Arithmeticorum libri duo。作为皮亚诺公理系统的应用,它自诞生之日就受到广 泛关注。同时,作为应对与正整数相关的问题的一种通用而简洁的处理方法,数学归纳法 在许多算术、逻辑问题的解决中都占有核心地位。即使是一些难于解决的问题,应用数学 归纳法大多可以化简问题描述,理清其本质,为接下来的解答铺平道路。 由于其固有的递归性,构造性和美学价值,数学归纳法是中学课本与学科竞赛中的热 门话题。特别地,信息学竞赛中的算术、逻辑、拓扑、数论以及组合数学相关的问题层出 不穷,我们有理由相信,数学归纳法,以及由数学归纳法衍生的结构归纳法等构造性证明 方法在信息学的算法设计中,同样会有其用武之地。
BZOJ20482009国家集训队书堆数学算法
BZOJ20482009国家集训队书堆数学算法题⽬⼤意:经典的物理上的桌边堆书问题,初中物理⽼师以前还讲过,只是仅仅记住了结论。
没关系,简单证明⼀下就好⾸先我们设由上⾄下第i本书⽐它以下那本书多伸出去的长度为a[i],前缀和为s[i],那么我们要求的就是s[n]为了简化问题我们设⼀本书的长度为1如果n=1a[1]=1/2,毫⽆疑义然后考虑两本书两本书的时候,重⼼明显在距以下那本书左端点的3/4处,故a[2]=1-3/4=1/4好的我知道了。
第⼀本是1/2,第⼆本是1/4。
那么第三本就是1/8!这样想的同学都仅仅过了例⼦。
我们考虑三本书的情况这个是怎么算的呢?⾸先先算三本书的重⼼距第三本书左端点的距离第⼀本书的重⼼为1/4 + 1/2 + 1/2第⼆本书的重⼼为1/4 + 1/2第三本书的重⼼为 1/2于是我们能够得到三本书的重⼼位置为(1/4*2+1/2+1/2*3)/3=1/2*2/3+1/2于是a[3]=1-(1/2*2/3+1/2)=1/2-1/2*2/3=1/2*(1-2/3)=1/2*1/3=1/6然后四本书的情况就不⽤多说了吧讨论四本书的重⼼距第四本书左端点的距离第⼀本书的重⼼位置为:1/6 + 1/4 + 1/2 + 1/2第⼆本书的重⼼位置为:1/6 + 1/4 + 1/2第三本书的重⼼位置为:1/6 + 1/2第四本书的重⼼位置为: 1/2于是四本书重⼼位置为(1/6*3+1/4*2+1/2+1/2*4)/4=1/2*3/4+1/2a[4]=1-(1/2*3/4+1/2)=1/2-1/2*3/4=1/2*(1-3/4)=1/2*1/4=1/8以此类推,我们有a[i]=1/2i那么这个东西怎么求和呢?n<=10^18,O(n)肯定是不现实的我们考虑调和级数极限公式lim(n->+∞)1/1+1/2+1/3+...+1/n = ln(n+1)+r当中r为欧拉常数近似值约为0.57721566490153286060651209但这是极限公式对于n⽐較⼩的情况误差会⽐較⼤所以当n⽐較⼩的时候O(n)暴⼒出解 n⽐較⼤的时候套⽤公式分界线理论上O(n)能过去即可 1000W左右就能够可是这题精度实在太低所以1W就能过去 0MS出解然后就⽔过去了。
算法合集之《浅析树的划分问题》
浅析树的划分问题东北育才学校贝小辉【摘要】树的最大-最小划分问题可以表述为如下形式:给定一棵n个节点的树以及每个节点的一个非负权值,要求将这棵树划分为k棵子树,使得子树中所有节点权值和的最小值最大。
将原问题转化为对于给定下界,划分最多子树的问题,并通过对新问题的解决结合二分法来解决原问题是可行的,但是算法的总复杂度要依赖于节点权值的范围。
本文接下来介绍了一个时间复杂度不依赖于节点权值范围的算法,随后通过对算法的描述、正确性的证明来进一步探讨算法的特点,并介绍了算法的一些扩展,最后总结了两个算法各自的特点。
【关键字】问题转化,割,移动,上方【正文】树的划分问题是图论中的一类范围非常广泛的问题,这类题目的大意就是将给定的一棵树划分为若干棵子树,使其能够满足一定的条件或是使得某个特定的函数达到最值。
如今,这类问题已被扩展出了各式各样的问题,并在很多领域都有着很广泛的应用。
本文所要着重探讨的,是其中一种被称为最大-最小划分的问题。
一、问题的提出草莓(NOI2003 Day 2-2 berry test6~test9)题目大意:给出一片草莓中每个草莓的重量以及它们的连接情况。
定义:sum(i)表示第i块草莓田中所有草莓重量的和(1<= i <= k),x = min{ sum(i) | 1<= i <=k }。
你的任务就是要把一块草莓田分割成k块,且分割方案需要满足如下的条件:·每一块中的草莓必然是直接或者间接的和其他草莓相连接的;·这种分割方案所对应的x尽可能的大。
最后输出你的分割方案和结果。
这是一道提交答案式的题目,其中第6个数据至第9个数据所给的图是一棵树,若不考虑具体的数据情况,我们可以将原问题抽象成如下问题:给定一棵树以及树中每个顶点的一个非负权值,将树划分为k棵子树,定义:sum(i)表示第i棵子树中所有节点权值的和,x = min{ sum(i) | 1<= i <=k },请求出x的最大值并输出此时的划分方案。
国家集训队2007论文集5.杨沐《浅析信息学中
浅析信息学中的“分”与“合”福建省福州第三中学杨沐目录【摘要】..................................................................... 错误!未定义书签。
【关键字】................................................................. 错误!未定义书签。
【正文】..................................................................... 错误!未定义书签。
一、引言............................................................... 错误!未定义书签。
二、例题分析 ...................................................... 错误!未定义书签。
[例一]牛奶模版 ............................................ 错误!未定义书签。
[例二]树的重建 ............................................ 错误!未定义书签。
[例三]最优序列 ............................................ 错误!未定义书签。
三、总结............................................................... 错误!未定义书签。
【感谢】..................................................................... 错误!未定义书签。
【参考文献】............................................................. 错误!未定义书签。
国家集训队2007论文集8.陈瑜希《多角度思考
多角度思考创造性思维----运用树型动态规划的解题思路和方法的探析关键字树结构动态规划信息学奥赛摘要在近几年信息学竞赛中,需要运用树型动态规划解决的问题频繁出现,这些问题变化繁多、各类思想精华渗透其中,对选手分析问题的能力和解题创造性思维有着较高的要求,因此它在竞赛中占据了重要地位。
本文将分析近几年国际比赛、全国比赛中的树型动态规划问题,重点探讨几种树型动态规划问题的解法,并从这些问题的分析过程中,提炼出解决这类问题的思想方法——多角度思考,创造性思维。
旨在论述解决问题的思维过程,而不仅仅是解题方法。
正文信息学竞赛中通常会出现这样的问题:给一棵树,要求以最少的代价(或取得最大收益)完成给定的操作。
有很多问题都是在树和最优性的基础上进行了扩充和加强,从而变成了棘手的问题。
这类问题通常规模较大,枚举算法的效率无法胜任,贪心算法不能得到最优解,因此要用动态规划解决。
和一般动态规划问题一样,这类问题的解决要考虑3步。
1、确立状态几乎所以的问题都要保存以某结点为根的子树的情况,但是要根据具体问题考虑是否要加维,加几维,如何加维。
2、状态转移状态转移的变化比较多,要根据具体问题具体分析,这也是本文例题分析的重点。
3、算法实现由于树的结构,使用记忆化搜索比较容易实现。
由于模型建立在树上,即为树型动态规划。
顾名思义,树型动态规划就是在“树”的数据结构上的动态规划。
大部分动态规划题都是线性的,线性的动态规划有二种方向,既向前和向后,相应的线性的动态规划有二种方法,既顺推与逆推。
而树型动态规划是建立在树上的,也相应的有两个方向:1. 根—>叶:既根传递有用的信息给子节点,完后根得出最优解的过程。
2. 叶->根:既根的子节点传递有用的信息给根,完后根得出最优解的过程。
这类的习题比较的多,应用比较广泛当然,还有一类问题,同时需要两种遍历方向,本文的第一题就属于这类。
问题描述Chris 家的电话铃响起了,里面传出了Chris 的老师焦急的声音:“喂,是Chris 的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris 的父母就心急如焚,他们决定在尽量短的时间内找到Chris 。
国家集训队2004论文集_汪汀
可知如果(+a1,-b2)和(+a2,-b1)都是 T 的可行交换,则有ω(b2)≤ω(a1),ω(b1)≤ω (a2),故ω(b1)+ω(b2)≤ω(a1)+ω(a2); 否则,或者(+a1,-b2)或者(+a2,-b1)不是 T 的 可行交换,根据引理 1,T’=T+{a1,a2}-{b1,b2}仍然是 T 的 k 度限制生成树,则ω (T)≤ω(T’),故ω(b1)+ω(b2)≤ω(a1)+ω(a2)。 ⑵充分性
综上,求最小 k 度限制生成树算法总的时间复杂度为 O(Vlog2V+E+kV)。
3、次小生成树
3.1、次小生成树的定义
设 G=(V,E,w)是连通的无向图,T 是图 G 的一个最小生成树。如果有另一棵树 T1,满 足不存在树 T’,ω(T’)<ω(T1) ,则称 T1 是图 G 的次小生成树。
3.2、求解次小生成树的算法
通过上述定理,我们就有了解决次小生成树问题的基本思路。 首先先求该图的最小生成树 T。时间复杂度 O(Vlog2V+E) 然后,求 T 的邻集中权值和最小的生成树,即图 G 的次小生成树。 如果只是简单的枚举,复杂度很高。首先枚举两条边的复杂度是 O(VE),再判断该交换是否 可行的复杂度是 O(V),则总的时间复杂度是 O(V2E)。这样的算法显得很盲目。经过简单的 分析不难发现,每加入一条不在树上的边,总能形成一个环,只有删去环上的一条边,才能 保证交换后仍然是生成树,而删去边的权值越大,新得到的生成树的权值和越小。我们可以 以此将复杂度降为 O(VE)。这已经前进了一大步,但仍不够好。 回顾上一个模型——最小度限制生成树,我们也曾面临过类似的问题,并且最终采用动态规 划的方法避免了重复计算,使得复杂度大大降低。对于本题,我们可以采用类似的思想。首 先做一步预处理,求出树上每两个结点之间的路径上的权值最大的边,然后,枚举图中不在
国家集训队设计方案集浅谈最短路径问题中
摘要分层思想与最短路径算法都在许多领域有着广泛的应用。
本文通过对一些信息学竞赛试卷的分析,从建立模型和优化算法两个方面阐述了分层思想在最短路径问题中的应用,并分别对这两个方面作了总结。
关键字最短路径分层图论正文1.引言最短路径问题是图论中的一个经典问题。
由于问题中边的权值往往可以从距离引申为其他沿路径线性积累的度量,如:时间、花费等,所以最短路径问题在实际生活中有着广泛的应用,如:城市规划、交通导航、网络寻优等。
分层思想作为一个重要的思想,也有着许多应用,特别在是某些高效的方法中,如:动态规划中的阶段划分、图论中基于求阻塞流的最大流算法等。
将分层思想应用到最短路径问题中,正是分层思想和最短路径问题的强强联合。
2.利用分层思想建立模型这一部分中,作者将简要介绍利用分层思想建立模型的三个问题:拯救大兵瑞恩、fence和cow relay,希望能对利用分层思想解题起到抛砖引玉的作用。
2.1 例题一拯救大兵瑞恩1题目:有一个长方形的迷宫,被分成了N行M列,共N×M个单元。
南北或东西方向相邻的两个单元之间可以互通,或者存在一扇锁着的门,又或者存在一堵不可逾越的墙。
迷宫中有一些单元存放着钥匙,并且所有的门被分为P类,打开同一类的门的钥匙相同,打开不同类的门的钥匙不同。
从一个单元移动到另一个相邻单元的时间为1,拿取所在单元的钥匙的时间以及用钥匙开门的时间忽略不计。
求从(1,1)到(N,M)的最短时间。
N,M不大于15,P不大于10。
分析:如果忽略了门和钥匙,我们可以把每个单元看1Chinese Team Selection Competition 1999成顶点,相互连通的单元之间连一条边权为1的边,那么本题就是一个标准的最短路问题,可以直接使用最短路算法求解。
由于有了门和钥匙的因素,所以必须考虑钥匙状态对门的影响。
我们把图分成2P层,分别对应持有钥匙的2P种状态,并根据钥匙的状态改造每层节点使相邻的连通节点间有长度为1的边。
漆子超《分治算法在树的路径问题中的应用》
【例二】 Query On a Tree Ⅳ
给定一棵包含N个结点的树,每个节点要么是黑色, 要么是白色。要求模拟两种操作:
1)改变某个结点的颜色。 2)询问最远的两个黑色结点之间的距离。
数据范围: N≤100000,边权绝对值不超过1000
此题出自2007年浙江省选,但此题中树的边权可能 为负,无法使用括号序列。
回想上题,题目所关注的对象是两个黑点之间 的距离,这就提醒我们可以在不影响树中黑色结点 之间的距离的前提下加入白色结点
如何改进基于边的分治的时间复杂度
通过对每个结点到其儿子的路径中加入了白色结点, 使之成为了类似线段树的结构。
叶节点为N的线段树共有2N个结点,所以含有N 个结点的树转化后所得的新树最多包含2N个结点。
每个点的度至多为3
如何改进基于边的分治的时间复杂度
定理: 如果一棵包含N个结点的树中每个点的度均不大于D,
那么存在一条边,使得分出的两棵子树的结点个数在 [N/(D+1),N*D/(D+1)]。
改进后的算法最坏情况下递归深度为
O(LogN)
使用基于边的分治解决上题
一条路径: 1.过中心边
2.在一颗子树内 递归处理
N≤10000,K≤109
树中点对统计
一条路径: 1.过根节点 2.在一颗子树内
递归处理
时间复杂度分析
每层的时间复杂度不超过O(NlogN)
最多递归O(logN)次
O(Nlog2N)
二、路径剖分算法
轻重边路径剖分 将树中的边分为两类:轻边
和重边。
记Size(U)表示以U为根的 子树的结点个数。
链的头结点
Query On a Tree Ⅳ
我们可以使用堆来维护一个点向下至某 个黑色结点的路径长度集合
国家集训队2009论文集从“k倍动态减法游戏
1.2.组合游戏需要解决的问题
由于组合游戏是一个双方博弈的游戏, 所以对于一个游戏的研究一般需要回
共 44 页-第 2 页
NOI2009 冬令营论文
从“k 倍动态减法游戏”出发探究一类组合游戏问题
答两个问题:谁有必胜策略?必胜策略是什么? 而在信息竞赛学的问题中需要解决的问题,也与此相对应,分三个层次: (1)判断谁有必胜策略; (2)寻找单回合的必胜选择; (3)维护多回合的必胜选择(交互题涉及) 。
1(if _(m, n) _ is _ an _ N position ) NP(m,n)= ,NP(m,n)关于 n 单调不减。 0(if _(m, n) _ is _ a _ P position )
这是因为若正整数 m0、n0 使得 NP(m0,n0)=1,则对于任意 n>n0,m=m0 都有 NP(m,n)=1。这是因为,状态(m0,n0)时玩家可以完成的操作,在状态(m,n)也允许 操作(这利用了 n>n0) ,且到达相同的状态(这利用 m=m0)。
S ( x) S ( y) 1 ,所以 S ( x) (T ( x)) 。有很多例子中, S ( x) (T ( x)) ,下文中
将会提及的“捡石子游戏”就是一个这样的例子;但是,在更多的游戏中
S ( x) (T ( x)) ,例如在本文主要讨论的“k 倍动态减法游戏”, S ( x) (T ( x) 2 ) ,
3.2.NP 状态定理:
定理: P 状态是“胜利终止状态”或者它的一切后继都为 N 状态, N 状态是“失 败终止状态”或拥有至少一个后继是 P 状态。
3.3.通式的动态规划解法
根据上面的定理,可以利用动态规划求得每个状态是 P 状态还是 N 状态。 具体的实现方法,可以按照图的拓扑逆序倒推(常用方法) ,也可以从初状态出 发进行记忆化搜索(这个留在后面讨论) 。用递推实现,我们不难设计出下面算 法: 步骤 1:把所有“胜利终止状态”标记为 P 状态,“失败终止状态”标记为 N 状 态。 步骤 2:找到所有的未定状态中,所有后继都被确定是 N 状态的状态,设置 为 P 状态。
国家集训队2009论文集浅谈如何解决不平等博
2
IOI2009 冬令营论文 方展鹏
正文
一、引言
在信息学竞赛中,博弈问题十分常见,下面就是一个例子: 引例:Green Hackenbush(经典问题) 给出 n 棵竹子,高度分别为 a1, a2 … an,玩家 L 和 R 打算在这些竹子上面玩 砍竹子游戏,规则如下: 1、两人轮流操作,玩家 L 先手; 2、对于每次操作,先选定一棵高度不为 0 的竹子,然后砍掉该竹子的某一 段,并且将与竹子底部不相连的部分也去掉; 3、最先无法进行操作的人输。 假设玩家 L 和 R 都采取最优策略,请问对于给出的局面谁会获胜。
关键字
不平等博弈问题 Surreal Number 局面分析 递推 迭代
目录
摘要................................................................................................................................ 1 关键字............................................................................................................................ 1 目录................................................................................................................................ 1 正文................................................................................................................................ 3 一、引言................................................................................................................ 3 二、另辟蹊径........................................................................................................ 4 2.1 Surreal Number 介绍 .......................................................................... 4 2.1.1 Surreal Number 的构造 ........................................................... 4 2.1.2 Surreal Number 的一些基本定理........................................... 6 2.1.3 Surreal Number 的运算法则................................................... 6
国家集训队2009论文集浅析竞赛中一类数学期
浅析竞赛中一类数学期望问题的解决方法福建省福州第八中学汤可因摘要期望在我们生活中有着十分广泛的应用,而对于我们信息学奥赛也出现了不少求解期望值的问题。
本文对于竞赛中涉及求离散型随机变量的数学期望的题目所使用的常用方法归纳成为两大类,并进行了总结与分析。
关键字期望递推动态规划方程组目录引言 (3)预备知识 (3)一、期望的数学定义 (3)二、期望的线性性质 (3)三、全概率公式 (4)四、条件期望与全期望公式 (4)一、利用递推或动态规划解决 (4)例题一:聪聪与可可 (5)分析 (5)小结 (6)例题二:Highlander (6)分析 (6)小结 (8)例题三:RedIsGood (8)分析 (8)小结 (9)二、建立线性方程组解决 (10)引入 (10)分析 (10)需要注意的地方 (12)例题四:First Knight (12)分析 (12)例题五:Mario (15)分析 (15)总结 (16)参考文献 (17)引言数学期望亦称为期望,期望值等,在概率论和统计学中,一个离散型随机变量的期望值是试验中每次可能结果的概率乘以其结果的总和。
而期望在我们生活中有着十分广泛的应用。
例如要设计一个彩票或赌博游戏,目标为赢利,那么计算能得到的钱以及需要付出的钱的期望,它们的差则需要大于0。
又例如对于是否进行一项投资的决策,可以通过分析总结得出可能的结果并估算出其概率,得到一个期望值而决定是否进行。
期望也许与每一个结果都不相等,但是却是我们评估一个事情好坏的一种直观的表达。
正因为期望在生活中有如此之多的应用,对于我们信息学奥赛也出现了不少求解期望值的问题。
而其中大多数又均为求离散型随机变量的数学期望。
本文对于这类题目所会涉及到的常用方法进行了归纳,总结与分析。
预备知识一、期望的数学定义如果X 是一个离散的随机变量,输出值为 x 1, x 2, ..., 和输出值相应的概率为p 1, p 2, ... (概率和为1), 那么期望值 ∑=ii i x p X E )(。
国家集训队2009论文集数学归纳法与解题之道
数学归纳法与解题之道山西省实验中学张昆玮教练:唐文斌胡伟栋2008年12月16日引言我们在学习算法的时候,总会有这样那样的疑惑:如此之多的浑然天成的算法,是怎样想到的?这些算法巧诚巧矣,可它们为什么是正确的呢?其实林林总总的算法背后,无不隐藏着真正的解题之道。
解题之道博大精深,该从何谈起?上面的疑惑又该如何解决?两千五百多年前,著名的哲学家和思想家老子对道之本质参透得可谓淋漓尽致。
引文中他给我们的答案是:参悟解题之道,从数学归纳法开始。
摘要本文简述了数学归纳法的相关理论,并结合作者的解题实践,以一些经典问题与竞赛题目为例,从证明算法正确性、构造性算法、与算法优化的关系等几个方面介绍了数学归纳法在信息学竞赛中的应用,讨论了数学归纳法的实用性与适用范围,以及归纳式算法设计相关的其他一些延伸与拓展。
目录●引言 (1)●摘要 (1)●目录 (2)●关于数学归纳法 (3)简短的回顾 (3)基本的定理、概念与方法 (3)是总结更是探索 (5)●在证明算法正确性上的应用 (6)贪心算法 (6)其他算法 (7)●在构造性算法中的应用 (8)数据结构的恢复性构造 (9)策略与解决方案的构造 (12)●数学归纳法与算法优化 (14)巧妙选择归纳对象 (14)力求完善归纳基础 (16)慎重选择归纳方向 (16)适当加强归纳假设 (17)●启发作用与美学价值 (19)●问题与缺陷 (19)理论上是否欠完备 (20)应用上是否较繁琐 (20)不适用的问题 (20)●后记 (21)●题目来源 (21)关于数学归纳法简短的回顾数学归纳法原理的发现可以追溯到公元1494年意大利数学家Francesco Maurolico 的著作Arithmeticorum libri duo 。
作为皮亚诺公理系统的应用,它自诞生之日就受到广泛关注。
同时,作为应对与正整数相关的问题的一种通用而简洁的处理方法,数学归纳法在许多算术、逻辑问题的解决中都占有核心地位。
国家集训队2009论文集分治算法在树的路径问
1
IOI2009 中国国家集训队论文
长沙市雅礼中学 漆子超
【目录】
【序言】........................................................................................................................ 3 【正文】........................................................................................................................ 4 一.树的分治算法.................................................................................................... 4 基于点的分治:.............................................................................................. 4 基于边的分治:.............................................................................................. 4 效率分析:...................................................................................................... 5 【例 1】树中点对统计................................................................................... 8 算法分析................................................................................................... 8 【例 2】Free Tour 2 ...................................................................................... 10 算法分析................................................................................................. 10 【本节小结】................................................................................................ 13 二.树的路径剖分算法:................................................................................... 14 【例 3】Query On a Tree.............................................................................. 14 算法分析................................................................................................. 14 引入路径剖分......................................................................................... 14 轻重边路径剖分..................................................................................... 15 【例 4】黑白树 ........................................................................................... 17 算法分析................................................................................................. 17 【小结】........................................................................................................ 18 路径剖分与树的分治的联系:.................................................................... 19 【例 5】Query On a Tree Ⅳ ........................................................................ 20 算法分析................................................................................................. 20 【本节小结】................................................................................................ 23 三.树的分治的进一步探讨:........................................................................... 24 如何改进基于边的分治的时间复杂度........................................................ 24 使用基于边的分治解决【例 2】................................................................. 26 使用基于边的分治解决【例 5】................................................................. 27 四.全文总结....................................................................................................... 28 【参考文献】.............................................................................................................. 29 【感谢】...................................................................................................................... 29 【附录】...................................................................................................................... 29
漆子超《分治算法在树的路径问题中的应用》共52页
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
52
漆子超《分治算法在树的路径问题中 的应用》
16、人民应该为法律而战斗,就像为 了城墙 而战斗 一样。 ——赫 拉克利 特 17、人类对于不公正的行为加以指责 ,并非 因为他 们愿意 做出这 种行为 ,而是 惟恐自 己会成 为这种 行为的 牺牲者 。—— 柏拉图 18、制定法律法令,就是为了不让强 者做什 么事都 横行霸 道。— —奥维 德 19、法律是社会的习惯和思想的结晶 。—— 托·伍·威尔逊 20、人们嘴上挂着的法律,其真实含 义是财 富。— —爱献 生
▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量之者,好之者不如乐之者。——孔子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
链的头结点
Query On a Tree Ⅳ
我们可以使用堆来维护一个点向下至某 个黑色结点的路径长度集合
O(1)
时间复杂度分析
询问操作: 我们使用堆来存贮每条链的最优结果 修改操作:
O(1)
修改一个点最多影响O(logN)条链,对于每条链我 们需要修改堆和线段树,O(logN) O(log2N) 路径剖分
分治算法 在树的路径问题中的应用
长沙市雅礼中学 漆子超
树的路径问题 以路径为询问对象的题目 POJ1741,树中点对统计 SPOJ QTREE,FTOUR2,QTREE4 Astar2008复赛 黑白树
论文内容
一,树的分治算法 树的分治的两种常见形式: 二,树的路径剖分算法 基于点的分治 归纳为基于链的分治 基于边的分治 三,树的分治算法的进一步探讨 如何改进基于边的分治的时间复杂度
N=100000 1.17s M=100000 N=100000 2.35s M=500000
测试环境:
1.78s 3.80s
2.28s 5.79o T7250 2.00GHz,1GB 编译器:Visual C++ 2008 , Release 模式
L L R L
R
R
Query On a Tree Ⅳ
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左 右两个儿子,区间[L,Mid]和[Mid+1,R].我们可以得到如 下转移:
MaxR( P) = Max{MaxR( Rc), MaxR( Lc ) + Dist ( Mid , R)}
L L R L R R
将路径剖分理解成基于链的分治后,我们可以用类 似基于点的分治的方法将路径分类. 1.与链有重合部分
2.与链没有重合部分 递归处理
Query On a Tree Ⅳ
1 2 … N
我们的目标就是要求出满足与此链 的重合部分在[1,N]的路径的最大长度. 我们可以用线段树解决这个问题.
Query On a Tree Ⅳ
树的重心
我们选取一个点,要求将其删去后,结点最多 的树的结点个数最小,这个点被称作"树的重 心" .
定理:存在一个点使得分出的子树的结点个数 均不大于N/2 证明: 假设U是树的重心,记 Size(X)表示以X为根的子树 的结点个数.记V为U的儿子 中Size值最大的点.
定理:存在一个点使得分出的子树的结点个数 均不大于N/2 证明: 假设Size(V)>N/2,那 么我们考虑V作为根结点的 情况,记Size'(X)表示此时 以X为根的子树的结点个数.
定理:存在一个点使得分出的子树的结点个数 均不大于N/2 证明: 如图. 对于A部分,显然 Size'(Ti)<Size(V) 对于B部分,Size'(U) = N-Size(V)<Size(V) 这与树的重心定义矛盾. 定理得证.
定理: 如果一棵包含N个结点的树中每个点的度均不大于D, 那么存在一条边,使得分出的两棵子树的结点个数在 [N/(D+1),N*D/(D+1)]. 证明: 不妨令D为所有点的度的最大值. 当D=1时,命题显然. 当D>1时,我们设最优方案为边(U,V),且以U,V 为根的两棵子树的结点个数分别为S和N-S,不妨设 S≥N-S.
如何改进基于边的分治的时间复杂度
回想上题,题目所关注的对象是两个黑点之间 的距离,这就提醒我们可以在不影响树中黑色结点 之间的距离的前提下加入白色结点
如何改进基于边的分治的时间复杂度
通过对每个结点到其儿子的路径中加入了白色结点, 使之成为了类似线段树 线段树的结构. 线段树 叶节点为N的线段树共有2N个结点,所以含有N 个结点的树转化后所得的新树最多包含2N个结点.
记D(i)表示第i个结点至子树内某个黑 色结点的路径中长度的最大值.Dist(i,j) 表示链上的第i个点到第j个点的距离.
Query On a Tree Ⅳ
对于线段树中的一个区间[L,R],我们需要记录下面 三个量:
MaxL = Max{Dist ( L, i ) + D(i)}
L
R
MaxR = Max{D(i) + Dist (i, R)} L
一,树的分治算法
树的分治算法是分治思想在树型结构上的体现.
:除去树中的某些对象,使原树被分解成若干 互不相交的部分.
两种常见的形式
基于点的分治
两种常见的形式
基于点的分治 1.选取一个点将无根树转 为有根树 2.递归处理每一颗以根结 点的儿子为根的子树
两种常见的形式
基于边的分治
两种常见的形式
【例二】 Query On a Tree Ⅳ 例二】
给定一棵包含N个结点的树,每个节点要么是黑色, 要么是白色.要求模拟两种操作: 1)改变某个结点的颜色. 2)询问最远的两个黑色结点之间的距离. 数据范围: N≤100000,边权绝对值不超过1000 此题出自2007年浙江省选,但此题中树的边权可能 为负,无法使用括号序列.
Opt =
D(L)+D2(L) 白色
D2(i)表示第i个结点至子树内某个黑色 结点的路径中长度的次大值. 问题只剩下如何维护D D2的值 问题只剩下如何维护D和D2的值
Query On a Tree Ⅳ
一个点向下至某个黑色结点的路径
…
链的头结点到某个黑点路径的最大长度 该点的儿子到某个黑点路径的最大长度 链的头结点
Query On a Tree Ⅳ
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左 右两个儿子,区间[L,Mid]和[Mid+1,R].我们可以得到如 下转移: Opt( Lc), Opt( Rc), Opt( P) = Max{ } MaxR( Lc) + MaxL( Rc) + Dist( Mid , Mid + 1)
Opt Opt
L R L L
Opt
R R
Query On a Tree Ⅳ
注意到Dist(i,j) = Dist(1,j) – Dist(1,i)
O(1)
Query On a Tree Ⅳ
对于边界情况[L,L], MaxL = D(L) MaxR = D(L)
Max{D(L)+D2(L),D(L)} 黑色
算法的常数
hide6.in
基于链的分治 线段树
hide7.in 0.59s 0.45s
hide8.in 1.13s 1.10s
hide9.in 1.90s 2.35s
0.26s 0.21s
测试环境: Intel Core2 Duo T7250 2.00GHz,1GB 编译器:Visual C++ 2008 , Release 模式 Free Pascal 2.1.4
算法的常数
1.在路径剖分算法中,链的长度和链的个数是 相互制约的,因此路径剖分算法在实际运行中是很 快的. 2.为了改进基于边的分治的最坏复杂度,我们 将一个结点个数为N的树改造成了一个结点个数为2N 的新树,自然增加了常数.
算法的常数
基于链的分治 基于点的分治 基于边的分治 未改进的 基于边的分治
�
最优方案指选取一条边使得删除这条边后所分离 出来的两棵子树的结点个数较大值最小. 设X为U的儿子中以X为根的子树的结点个数最大 的一个,我们考虑另一种方案(X,U). 设除去边(X,U)后以X为根的子树结点个数为P, 显然P≥(S-1)/(D-1),由于P<S且边(U,V)是最优方案, 所以N-P≥S,与P≥(S-1)/(D-1)联立可得 S≤((D-1)N+1)/D,又N≥D+1,所以S≤N*D/(D+1). 证毕
每个点的度至多为3
如何改进基于边的分治的时间复杂度
定理: 如果一棵包含N个结点的树中每个点的度均不大于D, 那么存在一条边,使得分出的两棵子树的结点个数在 [N/(D+1),N*D/(D+1)]. 改进后的算法最坏情况下递归深度为
O(LogN)
使用基于边的分治解决上题
一条路径: 1.过中心边 过中心边 2.在一颗子树内 递归处理
使用基于边的分治解决上题
记录两个根结 点到其子树内某个 黑色结点的路径的 最大长度
最优路径
修改O(logN) 修改 询问O(1) 询问
时间复杂度分析
询问操作: 对每颗树都记录其两个子树的最优值 修改操作:
O(1)
一个点最多属于O(logN)棵树,对于每棵树我们需 要修改堆,O(logN) O(log2N) 我们达到了与使用路径剖分同阶的时间复杂度.
R
Opt = 与此链的重合部分在[L,R]的路径的最大长度
Query On a Tree Ⅳ
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左 右两个儿子,区间[L,Mid]和[Mid+1,R].我们可以得到如 下转移:
MaxL( P) = Max{MaxL( Lc), Dist ( L, Mid + 1) + MaxL( Rc)}
路径剖分算法
这道题的算法似乎与路径剖分毫无关系,那么我们 是否能用路径剖分算法解决此题呢?
路径剖分与树的分治的联系
一棵树及其剖分
路径剖分与树的分治的联系
按照点到根结点路径上的轻边个数分层摆放.
路径剖分每次删除了一条链,所以路径 剖分算法可以看做是基于链的分治
Query On a Tree Ⅳ
进一步的分析
基于链的分治
AC
三,树的分治算法的进一步探讨
基于点的分治 删除一个点后树的个数太多,加大了设计 高效算法的难度 删除一条边后仅有两棵树 两