02 2015 档案

摘要:对于一个食物网(一个DAG),一个物种死亡后,某些物种就必然死亡,求出必然死亡的是那些物种。灭绝树的另一种含义是:“灭绝树跟节点到节点u的路径上的节点由那些原图中从根节点到节点u的所有路径中都经过了的点“。 1 /*****************************************... 阅读全文
posted @ 2015-02-28 16:35 idy002 阅读(314) 评论(0) 推荐(0)
摘要:反建图,计算强连通分量,将每个分量看成一个点,缩点后的图是一个DAG,如果是一棵树,则根代表的连通分量的大小就是答案,否则答案为0.收获: 图的东西如果不好解决,可以尝试缩点(有向图将每个强连通分量看成一个点,无向图将每个双连通分量看成一个点),缩点之后图就变成DAG或无向无环连通图,原本没有的一... 阅读全文
posted @ 2015-02-25 22:26 idy002 阅读(235) 评论(0) 推荐(0)
摘要:确定初始状态(n与1直接谁给了谁几个),后面的就确定了,再根据总结出来的东西决定前面谁给谁几个最优。n=1000000!!! 1 /************************************************************** 2 Problem: 1045 3... 阅读全文
posted @ 2015-02-25 21:46 idy002 阅读(154) 评论(0) 推荐(0)
摘要:贪心的一种,维护一种尽可能优的状态(即不会比最优解差),将这种状态保持到最后。 1 /************************************************************** 2 Problem: 1029 3 User: idy002 4 ... 阅读全文
posted @ 2015-02-25 19:44 idy002 阅读(223) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 #include 5 #define maxn 1010 6 using namespace std; 7 8 9 int n, m, a, b;10 vector g[maxn];11 int s[maxn][ma... 阅读全文
posted @ 2015-02-25 18:30 idy002 阅读(241) 评论(0) 推荐(0)
摘要:感谢:http://vfleaking.blog.163.com/blog/static/174807634201311011201627/http://hzwer.com/5250.html好吧,收获两点: 1、带修改,其实就是暴力,只是将同一块的查询再按照时间顺序排,这样就能减少在修改操作上“... 阅读全文
posted @ 2015-02-25 00:23 idy002 阅读(276) 评论(0) 推荐(0)
摘要:分块:先预处理,将原序列分成长度为len的许多块,计算从第i块到第j块的答案,(可以做到O(n*n/len))。每次询问时,将询问的区间分成三部分,:左边,中间,右边,中间是尽量大的一个块区间,其答案已经计算得到,左右两边加起来最多有2*len个元素,暴力计算其对答案的影响。O(q*len*f(n)... 阅读全文
posted @ 2015-02-24 21:45 idy002 阅读(176) 评论(0) 推荐(0)
摘要:如果不是在线,就是裸的莫队。但这道题要求在线,然后就不会了。。标程:http://hi.baidu.com/__vani/item/ecc63f3527395283c2cf2945算法主要是分块,然后处理处f[i][j]从第i块到第j块这个块区间的信息。第一个算法的思想是每个块区间除了维护答案,还记... 阅读全文
posted @ 2015-02-24 14:42 idy002 阅读(1354) 评论(0) 推荐(0)
摘要:又忘了给每个点标所属的块,瞬间就变成一个块了。写莫队一定要试一下随机极限数据。 1 /************************************************************** 2 Problem: 3781 3 User: idy002 4 ... 阅读全文
posted @ 2015-02-23 16:27 idy002 阅读(167) 评论(0) 推荐(0)
摘要:莫队维护逆序对,区间左右增减要分类讨论。记得离散化。 1 /************************************************************** 2 Problem: 3289 3 User: idy002 4 Language... 阅读全文
posted @ 2015-02-23 16:22 idy002 阅读(277) 评论(0) 推荐(0)
摘要:收获: 1、分块时顺便记录每个位置所属的块,然后一次排序就OK了。 2、要权衡在“区间移动”与“查询结果”之间的时间,莫队算法一般区间移动频率远大于查询结果,所以我们选择的辅助数据结构时就要注意了,我最开始写的是值域线段树,自己生成的极限数据要1m8s,改成树状数组后要24s,还是过不了,hzw... 阅读全文
posted @ 2015-02-23 13:23 idy002 阅读(311) 评论(0) 推荐(0)
摘要:感谢以下文章作者:http://blog.csdn.net/kuribohg/article/details/41458639http://vfleaking.blog.163.com/blog/static/174807634201311011201627/http://blog.csdn.net... 阅读全文
posted @ 2015-02-22 21:40 idy002 阅读(285) 评论(0) 推荐(0)
摘要:将树分成一些块,做法见vfleaking博客。 1 /************************************************************** 2 Problem: 1086 3 User: idy002 4 Language: C++ 5... 阅读全文
posted @ 2015-02-22 17:20 idy002 阅读(215) 评论(0) 推荐(0)
摘要:莫队,利用可以快速地通过一个问题的答案得到另一问题的答案这一特性,合理地组织问题的求解顺序,将已解决的问题帮助解决当前问题,来优化时间复杂度。典型用法:处理静态(无修改)离线区间查询问题。线段树也是处理区间问题的一个有力工具,它和莫队算法各有特点:线段树可以支持修改,并且单次操作时间复杂度一般为O(... 阅读全文
posted @ 2015-02-22 14:30 idy002 阅读(245) 评论(0) 推荐(0)
摘要:本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护。对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边构建起的连通性)。查询[l,r]时,先计算出[1,l-1],[l,r],[r+1,c]这三个线段的连通... 阅读全文
posted @ 2015-02-21 22:14 idy002 阅读(434) 评论(0) 推荐(0)
摘要:这道题几经波折啊。最开始和vfleaking一样,把题意理解错了,认为一个装备可能被多个装备依赖,然后想不出来,去看题解。发现自己理解错了题意,自己想想,其实也不难想到dp[i][j][k]表示“i号节点代表的子树,用掉j的钱,给父亲预留k个自己(但还是父亲付钱)”的状态,写出来交上去就是T,开始以... 阅读全文
posted @ 2015-02-21 15:50 idy002 阅读(176) 评论(0) 推荐(0)
摘要:给定一个简单无向有权图,求其最小生成树的个数。在我们用Kruskal计算最小生成树时,由于相同权值的边选择的顺序是随机的,所以我们最小生成树就也许有很多。对于同一权值的边,我们不论用什么顺序“扫过”,最终的得到的无向森林的连通性一定是一样的,即对后面的边是否加入的影响也是一样的,所以可以根据这一点将... 阅读全文
posted @ 2015-02-20 16:02 idy002 阅读(357) 评论(0) 推荐(0)
摘要:水。 1 /************************************************************** 2 Problem: 1015 3 User: idy002 4 Language: C++ 5 Result: Accepted... 阅读全文
posted @ 2015-02-19 23:33 idy002 阅读(285) 评论(0) 推荐(0)
摘要:求同一字符串的两个后缀的最长公共前缀。将字符串按位置放到Splay中维护(每个节点还维护一下该子树的hash),然后二分前缀的长度,用splay计算出指定范围的hash,按hash是否相等来判断是否相同。 1 /*******************************************... 阅读全文
posted @ 2015-02-19 22:56 idy002 阅读(523) 评论(0) 推荐(0)
摘要:将二维求圆心的方式推广到n维,然后用高斯消元解。具体来说就是,设圆上的两点A(a1,a2,...,an), B(b1,b2,...,bn)和圆心C(c1,c2,...,cn),则∑(ai-ci)2 = ∑(bi-ci)2∑2*(ai-bi)*ci=∑(ai2-bi2)总共有n+1个点,有C(n+1,... 阅读全文
posted @ 2015-02-19 16:13 idy002 阅读(244) 评论(0) 推荐(1)
摘要:水。。。 1 /************************************************************** 2 Problem: 1012 3 User: idy002 4 Language: C++ 5 Result: A... 阅读全文
posted @ 2015-02-19 15:34 idy002 阅读(264) 评论(0) 推荐(0)
摘要:我的第二道斜率DP。收获: 1、假设两个位置:p)的方向就会因为f的大小关系而变化,就没有凸的性质了。 2、斜率优化很难调试,所以当发现暴力DP和同样的方程被斜率优化了一下的答案不同时,不要去调试,直接去检查上面的各个函数是否写错或抄到代码中抄错了, 或者重推一遍。(注意决策点是否可能会重... 阅读全文
posted @ 2015-02-18 19:52 idy002 阅读(214) 评论(0) 推荐(0)
摘要:我的第一道斜率优化。就这道题而言,写出原始的方程: dp[i] = min{ dp[j] + (sum[i]-sum[j])2 + M | j in [0,i) }O(n^2)的复杂度肯定超时,要么优化转移,要么重写方程。斜率优化的思想就是减少不必要的枚举(即不枚举肯定不会成为决策点的j)。我们考... 阅读全文
posted @ 2015-02-18 18:11 idy002 阅读(292) 评论(0) 推荐(0)
摘要:原来的DP:dp[i][j]表示长度为i的合法串,并且它的长度为j的后缀是给定串的长度为j的前缀。转移:i==0dp[0][0] = 1 dp[0][1~m-1] = 0i>=1dp[i][0] = dp[i-1][0]*10-dp[i-1][m-1]dp[i][1] = dp[i-1][0]-(a... 阅读全文
posted @ 2015-02-18 13:56 idy002 阅读(176) 评论(0) 推荐(0)
摘要:正难则反前面定后面就定->枚举开头 1 /************************************************************** 2 Problem: 1008 3 User: idy002 4 Language: C++ 5 R... 阅读全文
posted @ 2015-02-18 10:59 idy002 阅读(160) 评论(0) 推荐(0)
摘要:本题就是求半交平面的交包含哪些直线,而且有点特殊(一般的半交平面用双端队列,因为可能转到最开始的直线,但本题不会,所以只需要一端操作就行了)。 1 /************************************************************** 2 Proble... 阅读全文
posted @ 2015-02-18 00:35 idy002 阅读(174) 评论(0) 推荐(0)
摘要:给定一个弦图,问最少染色数。对于弦图的一个完美消去序列,从后往前染色,每次染可以染的最小编号的颜色,由完美消去序列的定义,序列任一后缀的点的导出子图中,由该后缀第一个元素及其邻接点导出的子图一定是完全图,所以,序列中某一元素染的颜色编号是该完全图的大小。所以最小染色数小于等于最大团的点数,而显然前者... 阅读全文
posted @ 2015-02-17 21:40 idy002 阅读(322) 评论(0) 推荐(0)
摘要:一些定义:弦图是一种特殊图:它的所有极小环都只有3个顶点。单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图。图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,ai在ai、ai+1、ai+2...an的导出子图中是一个单纯点。弦图有一个性质:任何一个弦图都至少存在一个... 阅读全文
posted @ 2015-02-17 18:55 idy002 阅读(834) 评论(0) 推荐(0)
摘要:之前没不知道这个数列。一个purfer序列与一棵树一一对应。长度为n的purfer的集合:A = {s | s is a sequence and a∈[1,len(s)+2]一个直接的结论就是:n个带标记的节点的树有nn-2种。这道题有了上面的对应,可以计算满足要求的purfer序列的个数,用组合... 阅读全文
posted @ 2015-02-17 13:39 idy002 阅读(262) 评论(0) 推荐(0)
摘要:这道题考察的是组合计数(用Burnside,当然也可以认为是Polya的变形,毕竟Polya是Burnside推导出来的)。这一类问题的本质是计算置换群(A,P)中不动点个数!(所谓不动点,是一个二元组(a,p),a∈A,p∈P ,使得p(a)=a,即a在置换p的作用后还是a)。Polya定理其实就... 阅读全文
posted @ 2015-02-16 16:18 idy002 阅读(283) 评论(0) 推荐(0)
摘要:最初的印象是网络流之类的东西,但好像不是。想了一下,没什么思路,就网上看了一下,有人说是DP,然后就自己想DP的做法,最开始想的状态是:dp[n][s]第n天走s这条路,前n天最小的代价,但发现路径不好表示,并且m=20时s最大就是10^6级别了,所以放弃了这个状态。打开题解,发现题解的状态不需要记... 阅读全文
posted @ 2015-02-16 14:20 idy002 阅读(231) 评论(0) 推荐(0)
摘要:这道题第一眼是生成树计数,n是100,是可以用O(n^3)的求基尔霍夫矩阵的n-1阶的子矩阵的行列式求解的,但是题目中并没有说取模之类的话,就不好办了。用高精度?有分数出现。用辗转相除的思想,让它不出现分数。但过程中会出现负数,高精度处理负数太麻烦。用Python打表?好吧,Python还不熟,写不... 阅读全文
posted @ 2015-02-15 22:45 idy002 阅读(510) 评论(0) 推荐(0)
摘要:最近学习了LinkCutTree,总结一下。LinkCutTree是一种数据结构(是Tree Decomposition中的一种),她维护的一般是无向图(一个森林),支持连边、删边、链修改、链查询(点属于特殊的链,修改可以是单点修改、整链修改,查询可以是最值、和等)这四种操作。中心思想是将边分类,一... 阅读全文
posted @ 2015-02-14 23:09 idy002 阅读(336) 评论(0) 推荐(0)
摘要:从1月26号到达杭州,到现在(2月14号),在杭州待了将近20天。花了这么多时间和钱,如果要问我最大的收获是什么,可能就是:自己的弱小、还需要学习哪些知识以及考试心态。自己一个人学习最可怕的是自我膨胀,认为自己学了那么多东西,懂的应该很多了,和林荫的同学差的应该不多了,但自己忽略了他们也在学习。因为... 阅读全文
posted @ 2015-02-14 21:46 idy002
摘要:这道题很久以前用树链剖分写的,最近在学LCT ,就用LCT再写了一遍,也有一些收获。因为这道题点权可以是负数,所以在update时就要注意一下,因为平时我的0节点表示空,它的点权为0,这样可以处理点权为非负求最大值和求和的情况(即不用特判某个点是否有左右儿子,直接更新就行了),但这道题就不行(求和要... 阅读全文
posted @ 2015-02-14 20:20 idy002 阅读(304) 评论(0) 推荐(0)
摘要:动态树,支持加边,修改点权,查询链的点权和。 1 #include 2 #include 3 #define maxn 30010 4 using namespace std; 5 6 namespace L { 7 int pnt[maxn], pre[maxn], s... 阅读全文
posted @ 2015-02-14 13:30 idy002 阅读(195) 评论(0) 推荐(0)
摘要:简单题,主要为了练手。 1 #include 2 #include 3 #define maxn 100010 4 using namespace std; 5 6 namespace L { 7 int pnt[maxn], pre[maxn], son[maxn][2... 阅读全文
posted @ 2015-02-13 23:15 idy002 阅读(132) 评论(0) 推荐(0)
摘要:维护一个带点权的无向图森林,支持: 1、删边 2、加边 3、增加某条链所有点的点权 4、求某条链上点权的最大值大概思路:前两个需要更改根(即需要翻转标记)第三个又需要一个标记,第四个每个节点记录该splay中以该节点为根的子树的最大点权。收获: 1、对于splay前的标记下传可用递归写法,... 阅读全文
posted @ 2015-02-13 22:41 idy002 阅读(130) 评论(0) 推荐(0)
摘要:这道题是树链剖分的裸题,正在学LCT,用LCT写了,发现LCT代码比树链剖分还短点(但我的LCT跑极限数据用的时间大概是kuangbin大神的树链剖分的1.6倍,所以在spoj上是850ms卡过的)。收获: 1、边转换成点(即若存在边(u,v),则新加一个点z代表边,将z连接u和v,z的点权就是(... 阅读全文
posted @ 2015-02-13 20:29 idy002 阅读(184) 评论(0) 推荐(0)
摘要:我的第一道主席树(静态)。先记下自己对主席树的理解:主席树的作用是用于查询区间第k大的元素(初始化nlog(n),查询log(n))主席树=可持续线段树+前缀和思想主席树实际上是n棵线段树(由于是可持续化线段树,所以实际上是n个长度为log(n)的链),第i棵线段树保存的是a[1]~a[i]这i个数... 阅读全文
posted @ 2015-02-11 21:40 idy002 阅读(198) 评论(0) 推荐(0)
摘要:我的第一道LCT题(居然1A,O(∩_∩)O哈哈~)题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2002大概题意:给一颗有根树,维护每个节点的深度(到根节点的边数),支持断开子树并把它连接到任意节点。题解:Link Cut Tree 1 /... 阅读全文
posted @ 2015-02-09 22:25 idy002 阅读(340) 评论(0) 推荐(0)
摘要:是NOI2003Editor的一个子任务 1 #include 2 #include 3 #define maxn 100010 4 using namespace std; 5 6 struct Splay { 7 int pre[maxn], son[maxn][2]... 阅读全文
posted @ 2015-02-09 21:22 idy002 阅读(241) 评论(0) 推荐(0)
摘要:这道题我先写了值域线段树,一直WA,和网上的标程对拍,也拍不出错误,然后改写SPALY,又WA,也拍不出错误,最后只能用vector水过了。 我把我写的值域线段树、Splay、vector、数据生成器放在下面,若有哪位好心人愿意帮我看看,感激不尽。 值域线段树: 1 /*************** 阅读全文
posted @ 2015-02-09 18:45 idy002 阅读(313) 评论(0) 推荐(0)
摘要:这道题考察人的严谨,各种情况分类讨论。 1 #include 2 #include 3 #include 4 #define maxn 50010 5 #define maxq 17 6 #define P(i) (1=0; q-- ) 28 if( len>P(q) ) {2... 阅读全文
posted @ 2015-02-06 23:03 idy002 阅读(141) 评论(0) 推荐(0)
摘要:bzoj 1269题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1269大致思路:用splay维护整个文本信息,splay树的中序遍历即为该文本。收获:1、可以先在文本开始和结尾个插入一个节点,然后每次操作都适当调整位置,这样可以减少特判(插入... 阅读全文
posted @ 2015-02-06 17:47 idy002 阅读(354) 评论(0) 推荐(0)
摘要:题意:给定一个带点权的无向图,有两种操作: 1、将两个连通分量合并。 2、查询某个连通分量里的第K大点。题解:用并查集维护连通关系,一开始建立n棵splay树,然后不断合并,查询。处理技巧: 1、每个顶点u所在的Splay就是T[find(u)]。 2、每个顶点在树中对应的节点编号就是该顶点... 阅读全文
posted @ 2015-02-05 19:51 idy002 阅读(425) 评论(0) 推荐(0)
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1502题解:simpson积分求面积,s = (f(a)+f(b)+4*f(c))/6*Δx,c=(a+b)/2。题中的树投影下来是一些圆和相邻圆的公切线组成的一个封闭图形,并且上下对称,所以可以... 阅读全文
posted @ 2015-02-05 17:40 idy002 阅读(287) 评论(0) 推荐(0)
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503题解:维护一颗Splay和一个外部变量,树中每个节点表示一个人,节点权值a +外部变量delta =该员工工资。细节看代码。注意:一进来工资就低于最低工资的人不能算是“离开公司”的人。 1... 阅读全文
posted @ 2015-02-04 23:30 idy002 阅读(201) 评论(0) 推荐(0)
摘要:大致题意:有一个空序列,依次插入1~N到该序列中,每次指定插入的位置,每次插入完成返回当前序列的LIS的长度。题解:设dp[i]表示前缀1~i的最长上升子序列的长度。因为是按照递增顺序插入的,所以当刚插入完某个数到i位置(此时能保证该数是当前序列的最大值)dp[i] = max{ dp[j] | j... 阅读全文
posted @ 2015-02-04 21:20 idy002 阅读(404) 评论(0) 推荐(0)