上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 25 下一页
摘要: 不说什么了,模板题题目数据有点弱,不严格的次短路也能ac。。。。View Code 1 #include <cstring> 2 #include <cstdlib> 3 #include <algorithm> 4 #include <iostream> 5 #include <cstdio> 6 7 #define N 100000 8 #define M 2000000 9 10 using namespace std; 11 12 struct HP 13 { 14 int x,d; 15 }hp[M]; 16 17 int 阅读全文
posted @ 2012-10-29 22:55 proverbs 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 分析:可以证明,任意两点间的符合题目要求的路径必然是在MST上的。有了这个,这题就水了。。。我没有想到,是venique神犇告诉我的然后在MST上做LCA倍增,顺便维护d[i][j]表示i到他的2^j倍祖先的最大权,就好了~我是蒟蒻。。LCA写萎了。。看了venique的代码,才发现错。。。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <iostream> 6 7 #de 阅读全文
posted @ 2012-10-29 22:27 proverbs 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 分析:做这个题还是需要技巧的。先将所有查询读入,按照右端点排序。从1~n扫,维护pt[i]表示i向左第一个和a[i]相等的数字的位置,扫到i的时候实时更新树状数组:c[pt[pt[i]]+1]~c[pt[i]]区间+1(pt[i]!=0),与此同时,处理右端点与i重合的查询,此询问的答案就是这个询问的左端点在树状数组中的值(树状数组起区间修改单点查询的功能),至于为什么,画个图应该很容易知道。PS:树状数组的区间修改单点查询的实现:将原数组差分,令d[i]=c[i]-c[i-1],特别地,d[1]=c[1]。那么区间[l,r]整体加上k的操作就可以简单地使用d[l]+=k;d[r+1]-=k来 阅读全文
posted @ 2012-10-29 19:52 proverbs 阅读(1116) 评论(0) 推荐(0) 编辑
摘要: 分析:我其实想到链状怎么做了,没有往下多想。一直想用组合做。最后看到CLJ的题解,才发现我已经想对了一半。。。对于一个链来说,设Dp[i]为长度为i的链和一个“中心”的生成树数量,可以Dp之。。然后考虑环,枚举1节点所在的环的长度,设为Len,那么这个环的位置有Len种情况,这个环与中心连接也有Len种情况,那么这个节点对答案的贡献就是Len^2*Dp[n-Len]。。转自:http://hi.baidu.com/wjbzbmr/item/3f5e90f02b913ed66225d201View Code 1 #include <cstring> 2 #include <cs 阅读全文
posted @ 2012-10-28 21:06 proverbs 阅读(906) 评论(0) 推荐(0) 编辑
摘要: 题意:中文题。思路:裸的最大流,然而点数太多,所以,转换成平面图最大流——最短路裸的不能再裸的平面图最大流竟然没有spfa快,抑郁。。刷了几天TYVJ,发现变弱了。。其实本来就特别弱(边需要建成双向的,我就不改了)View Code 1 #include <cstring> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <algorithm> 5 #include <iostream> 6 7 #define N 3000000 8 #define M 10000000 9 1 阅读全文
posted @ 2012-10-28 17:45 proverbs 阅读(1270) 评论(8) 推荐(0) 编辑
摘要: 题意:给出n个鼹鼠的编号(打乱顺序)排成一列,从第一个(非编号)鼹鼠开始挖洞,第2-n个鼹鼠在第一个鼹鼠挖洞的基础上挖洞,如果编号比之前的大就往右边走,否则往左边走,如果走不通(即左边或者右边没有洞),就自己挖洞,每只鼹鼠都会挖恰好一个洞。最终会形成一个二叉搜索树,得到这个树的dfs序列,把每一项都%2,最终得到一个01序列,与输入序列匹配,求输入序列在dfs序列中出现过多少次。(貌似说的不太清楚,看不懂的话可以去读原题,很容易看懂,我这英语水平都读懂了。。。就是表达不出来)思路:笛卡尔树,鼹鼠的排列顺序满足小根堆的性质,编号满足二叉搜索树的顺序,就可以构造了~最后kmp就可以了~PS:dfs 阅读全文
posted @ 2012-10-12 20:28 proverbs 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一些节点,每个节点有两个值,lable和priority,要求构成一个笛卡尔树,按lable是二叉排序树,按priority是大根堆(不一定完全二叉树)。输出括号表示。思路:没什么好说的,完全自己独立写的代码,除了读入参考了rainy days的,其他都是独立创造的~自我感觉写的还可以~(抑郁,把括号表示法搞反了,纠结了好久,外面的括号越少的是堆顶!又一直以为只有一个字母,又纠结了好久,可以是一个字符串!)读入说明见:http://www.cnblogs.com/rainydays/archive/2011/06/15/2081266.htmlPS:字符串s是二叉排序树结构,权值w是 阅读全文
posted @ 2012-10-11 22:38 proverbs 阅读(830) 评论(2) 推荐(0) 编辑
摘要: 题意:题目大意:让你构造一棵笛卡尔树。笛卡尔树的节点含有2个值,1个key,一个value,其中key是主键,value是辅键。一棵笛卡尔树就是:key升序,value升序或者降序。类似堆。判断能否构成。(PS:此题保证数据相异,必然能够成)思路:第一次做,参考的别人的,不过这个模板好像写的有点别扭。。自我感觉思路比较清晰的模板见我的下一篇文章:http://www.cnblogs.com/proverbs/archive/2012/10/11/2720592.htmlView Code 1 #include <cstdio> 2 #include <cstring> 阅读全文
posted @ 2012-10-11 22:32 proverbs 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 题意:一颗树,得到每个节点可到达的最远路径长度组成的序列,每给定一个q,求最长满足{最大值-最小值<=q}的连续序列的长度分析:①求以每个节点出发的最长路径dfs+树形dp:dfs出从u节点出发,向下延伸的最长路径的长度dis[u],以及是从那条边向下延伸得到的disnum[u],还有u节点向下延伸的次长路pis[u]从上向下DP,找到dp[u]表示从u向父节点延伸的最长路径长度(如果这个还不熟练请移步:HDU 2196,就是求步骤①)②维护区间最大最小的差维护一个队列(虚拟的,真实存在的只是 h 队头指针 ,t 队尾指针 两个指针),若当前h~t不满足条件h++否则t++用rmq O( 阅读全文
posted @ 2012-10-11 19:29 proverbs 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 题意:4*N的矩形中放入1*2的小矩形有多少种放法分析:表示公式不会推导。。没找着有人推公式的证明了。。。求证明、、、f(n)=f(n-1)+5*f(n-2)+f(n-3)-f(n-4)手动算出来前4项,然后处理线性递推式就好了~View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 6 using namespace std; 7 8 struct MT 9 {10 int x,y;11 int mt[7][7 阅读全文
posted @ 2012-10-11 19:15 proverbs 阅读(855) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 25 下一页