摘要: 看题目的出门左拐: http://www.zybbs.org/JudgeOnline/problem.php?id=1036 题目大意:给定一棵加权树,实现修改任意节点权值,求两点间路径最大值和权值和的操作。 看到题目想都没想就LCT了,敲啊敲、敲啊敲……本来YY着1A的,然后发现WA了……第一个点就WA了…… 囧……分析了好半天……睡了一觉……猛然想起自己宏定义的INF…… 原来宏定义INF ~0u>>1然后赋值-INF会出问题的- - 我对C++了解不熟……学习了……#include <iostream>#include <cstdio>#include 阅读全文
posted @ 2011-08-06 16:11 Delostik 阅读(745) 评论(0) 推荐(0) 编辑
摘要: http://www.zybbs.org/JudgeOnline/problem.php?id=1095 囧……搞了两天…… 本来一看题可以用树链剖分搞,无奈我还不会……然后想起神犇杨弋的《线段树》有这道题,于是乎膜拜了一下,发现这是最后留下的思考题= =! 然后又发现cqx神牛的论文中有讲解,于是乎又膜拜了一下……(不是一下,是一天……) 原理是很好理解的,用类似括号序列的方法,这样两个黑点间的距离就是未匹配括号的个数了,可以线性维护……但是写起来一个句子长得都越屏了,实在难调,做了一个小地方,要盯着屏幕找好久……(*_*) 经过一天半的努力和QZ神牛的论文注释,终于AC了……... 阅读全文
posted @ 2011-08-01 17:06 Delostik 阅读(1143) 评论(0) 推荐(0) 编辑
摘要: https://www.spoj.pl/problems/QTREE/ Splay基础打得差不多之后,第一次搞LCT。 我的代码跟QZ的太像了囧,我发现我什么都是跟他学的,以至于我俩同时写一个数据结构题交上去就差不多会被判作弊…… #include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>#define NIL LCT#define MN 10001#define MM 20001#define INF 1000000 阅读全文
posted @ 2011-07-31 19:50 Delostik 阅读(611) 评论(0) 推荐(0) 编辑
摘要: <题目描述自行搜索……> 为了学习LCT,要练好Splay。这道题的插入、修改、翻转操作都是裸的Splay操作,不怎么难,关键是最大子段和的维护上。之前做过一道线段树的题叫《小白逛公园》,是要用一棵线段树来维护最大子段和,然后我就把线段树的维护方法加到了Splay上,写了一晚上,总算是A掉了…… 维护最大字段和的方法: 我们先维护一个序列的包括最左端节点的最大子段和MaxStartLeft,维护一个包括其最右端节点的最大字段和MaxStartRight,然后再维护每个节点左子树的Sum和右子树的Sum。那么对于每个节点,以他为根的子树的序列的最大子段和就有如下几种情况: 1.节点本 阅读全文
posted @ 2011-07-30 10:55 Delostik 阅读(543) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1639 题目大意:给定一个图,求最小生成树,其中某个节点的度数小于K。 这就是一个最小k限度生成树,我写了好久好久,也有我不熟悉STL的原因,CE了好久…… 求最小K度生成树的方法:首先去掉特殊点(v0),然后图会成为x个联通块,求x次最小生成树,然后将这x个生成树连接到v0上。 每次寻找一个点p,满足点p不与v0相联系(边不在生成树上,不是不相连),且与点p相关的在生成树上的边大于点p到v0的距离,舍弃原来的边,并将点p与v0相连。#include <iostream>#include <cstdio>#inclu 阅读全文
posted @ 2011-07-28 23:53 Delostik 阅读(390) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2976 题目大意:给定n个二元组(a,b),扔掉k个二元组,使得剩下的 最大。 这两天一直在搞分数规划,有了前两道题(3621、2728),这道题就是完完全全的大水题了。 设 r=100*∑(ai)/∑(bi) ,有 100*∑(ai)-r*∑(bi)=0 ∑(100*ai-r*bi)=0 这个东西是单调的…… 我们可以将每个二元组的得分设为100*a-r*b,然后从大到小排序,取前n-k个得分求和(sum)。若sum>0则说明r还不够大,可以向上二分;反之向下二分…… 我最讨厌精度什么的了……尤其是C++的精度……#include 阅读全文
posted @ 2011-07-28 12:26 Delostik 阅读(204) 评论(2) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3621 这两天一直在复习代码,因为好久都不写东西了,而且转了语言,除了Dinic我什么都不会写…… 题目大意:给你一个有向图,边有权(T),点有权(F),使求一个环,使得最大化∑(F)/∑(T)。 这是一个最优比率环问题,与上一个最有比率生成树问题相似,都是01分数规划的考点。 设 ans≥∑(F)/∑(T) , 有 ∑(F)-∑(T)*ans≤0 ∑(F-T*ans)≤0 我们可以二分ans,将图的边权变为 F-T*ans,用SPFA判断图中是否有负权回路。如果图中有负权回路,则当前回路中 ∑(F)-∑(T)*ans<0,继而推得∑ 阅读全文
posted @ 2011-07-28 11:24 Delostik 阅读(289) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2728 题目大意是:给你坐标上一些点,然后你需要用一些边把他们连接起来,边有费用和长度,求总费用和总长度最小比值。 即最优比率生成树,用01分数规划的Dinkelbach算法解决。 问题目标求 MIN( ∑CiXi / ∑DiXi )Xi∈{0,1} ,设r=∑CiXi / ∑DiXi ,可得∑CiXi - ∑DiXi * r=0. 设Q(r)=∑CiXi - ∑DiXi * r = ∑(CiXi - DiXi*r), 即当Q(r)无限逼近0时得到问题的极值,所以我们将边权转化为(Ci-Di*r)不断求最小生成树即可。 (废话:为什么说这. 阅读全文
posted @ 2011-07-27 21:38 Delostik 阅读(244) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1201 题目大意是:告诉你一个数列B在另一个数列A中每一个闭区间[a,b]中至少包含c个数,求B数列的最小长度。 模型转换一下,使用二进制0、1表示当前数取还是不取,此问题即成为典型的查分约束系统。 令S[i]表示0..i中1的个数,第i位状态即 S[i]-S[i-1] ,满足 0 ≤ S[i]-S[i-1] ≤ 1. 对于每一个条件(a,b,c),满足 c ≤ S[b]-S[a-1] ≤ b-a+1. 即可得到 S[i]-S[i-1]≤1 S[i-1]-S[i]≤0 S[b]-S[a-1]≤b-a+1 S[a-1]-S[b]≤ -c (. 阅读全文
posted @ 2011-07-26 19:09 Delostik 阅读(196) 评论(0) 推荐(1) 编辑
摘要: http://poj.org/problem?id=1094 这道题基本上是1A的……是过了样例之后就1A了,但是之前花了大量的时间。 题目大意是:给定一些关系,形如 x<y ,判断在第几个条件前能确定唯一的大小关系,或者无法判断他们之间的大小关系。 解法应该是拓扑排序,但是思路不清晰是很难办的…… 首先应该判断图中有没有环,有环肯定无解,这个用拓扑排序解决。 然后,使用传递闭包判断得出的解是否唯一。 #include <iostream>#include <cstdio>#include <cstring>#include <cstdlib&g 阅读全文
posted @ 2011-07-26 16:47 Delostik 阅读(180) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3580 题目大意说给你一个数列,有区间同加一个数、区间翻转操作、区间滚动操作、删除一个数、插入一个数,查询区间最小值这些操作。 我是使用Splay乱搞的。其中revolve操作有点头疼,不过仔细观察发现,revolve l r x 其实就是交换(l,r-x)和(r-x+1,r)两个区间。 代码很长很长很长……而且跟QZ的很像很像很像…… 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib 阅读全文
posted @ 2011-07-26 11:23 Delostik 阅读(793) 评论(0) 推荐(0) 编辑
摘要: 1026: [SCOI2009]windy数Time Limit: 1 SecMemory Limit: 162 MBSubmit: 274Solved: 130[Submit][Status][Discuss]Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。windy想知道,在A和B之间,包括A和B,总共有多少个windy数?Input 包含两个整数,A B。Output 一个整数。Sample Input【输入样例一】 【输入样例二】 1 10 25 50Sample Output【输出样例一】 【输出样例二】 9 阅读全文
posted @ 2011-04-13 16:51 Delostik 阅读(1221) 评论(0) 推荐(0) 编辑
摘要: 1025: [SCOI2009]游戏Time Limit: 1 SecMemory Limit: 162 MBSubmit: 178Solved: 120[Submit][Status][Discuss]Descriptionwindy学会了一种游戏。 对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。 最开始windy把数字按顺序1,2,3,……,N写一排在纸上。 然后再在这一排下面写上它们对应的数字。 然后又在新的一排下面写上它们对应的数字。 如此反复,直到序列再次变为1,2,3,……,N。 如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3-> 阅读全文
posted @ 2011-04-13 11:31 Delostik 阅读(749) 评论(0) 推荐(0) 编辑
摘要: 1024: [SCOI2009]生日快乐Time Limit: 1 SecMemory Limit: 162 MBSubmit: 192Solved: 135[Submit][Status][Discuss]Descriptionwindy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得每块蛋糕看起来漂亮,我们要求 N 块蛋 阅读全文
posted @ 2011-04-13 11:13 Delostik 阅读(502) 评论(1) 推荐(0) 编辑
摘要: [JSOI2008]星球大战starwarDescription 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每一次打击之后反抗军占据的星球的连通快的 阅读全文
posted @ 2011-04-13 09:39 Delostik 阅读(1094) 评论(0) 推荐(0) 编辑