- 博客(37)
- 资源 (2)
- 收藏
- 关注
原创 POJ 1635 Subway tree systems
有关树的同构问题。基本思想是通过树的遍历结果获得树的一种唯一表示,所以要确定子树的相对顺序。一开始想通过子树大小来确定,但同大小的子树就没法确定顺序了。而题目实际上给出了树的一种表示方法,一种基于字符串的表示方法,自然可以通过字典序确定唯一的子树相对顺序。一开始TLE,因为在每当构造子树的唯一表示时,我都会创建一个新的字符串。参考了别人的代码后,发现可以直接用下标定位原串的子串。这里实际上也是
2015-04-17 18:40:06
458
原创 POJ 1015 Jury Compromise ---- DP
把p-d作为约束,p+d最大作为优化目标。 倒序枚举m以在空间上压缩掉n。普遍流传的解法恐怕根本就不是dp,也无法证明正确性,否则0/1背包就多了一种从未有过的解法。而且其记录路径的做法我也觉得是错的,我用的是更保守的做法,用一个三维数组,包含了n这一维的信息来记录路径debug个了一个下午,问题基本上都出在C中多维数组的使用上。比如说你定义了dp[n][m],但你把它当dp[m][n]用,也
2015-04-17 17:58:57
525
原创 LCA(最近公共祖先)
Tarjan(离线)O(n)-O(1)定义:子孙及自身都被访问的节点叫死结点;自身或存在子孙未被访问的节点叫活节点,自身被访问思想:在dfs的过程中将已被遍历过的子树(包括空子树)及其父节点归为一类,同一类的的节点的LCA就是这个父节点,两个不同类的节点共有同一个LCA。每次只处理与当前访问节点有关的询问(所以是离线算法),如果询问中的另外一个点已经被访问过,那么LCAhdu 2586
2013-09-26 19:50:23
1015
转载 求1到n关于p逆元(转)
求1到n关于p逆元 的新方法说是新方法。。可能只是我没见过,(肯定比jzp论文里的简单)。。。神犇轻D。 求出1 到n的阶乘mod p 存为f求出f[i]的逆元 v[i]然后i的逆元就是v[i]*f[i-1]求v[i]的方法是、先求v[n],这个exgcd或者快速幂然后v[i]=v[i+1]*(i+1)%p
2013-08-09 12:36:20
875
原创 欧拉回路
一、有欧拉通路的条件:无向图:图联通,最多除两点外所有点度为偶数,奇数度的两点分别为起点和终点。 有向图:基图(原图不考虑边的方向)联通,最多除两点外所有点入度等于出度,该两点,一点入度比出度大一,一点出度比入度大一。二、生成欧拉通路: 1、fluery算法主体是尽量用不是桥的边去延生欧拉通路。 2、dfs中先得到邻接点欧拉路最后将该点加入欧拉路(没有理解)#
2013-07-29 21:08:00
449
原创 二分图匹配算法汇总
常见的二分图匹配算法有匈牙利算法和Hopcroft_Karp算法。其实不仅二分图,即使是有奇环的图以可以用这些算法寻找匹配(边独立集),因为它们都是寻找增广路(交错轨)的算法,而图中没有增广路是得到最大匹配的充要条件(这个还不理解)。1、匈牙利算法基本思想:以图(或二部图中的一部)中每个点为起点寻找一条增广路。在此之上有dfs和bfs的写法。dfs适用于稠密图,bfs适用于稀疏图,但渐进时
2013-07-29 20:22:18
723
转载 伸展树(Splay tree)
ACM_______MyBlog: http://www.baiyun.me______________白白の屋随笔- 179 文章- 0 评论- 49 博客园 首页 新随笔 新文章 联系 管理 订阅 (转)伸展树 ( Splay tree )MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
2013-07-29 14:27:44
608
原创 区间元素可变(添加与删除)的第求k大数和给定数的排名问题
思想来源于张昆玮的《统计的力量》划分树只能在静态区间上求第k大数和给定数的排名基于字母数的动态性和数值大小的字典有序性,只要在其结点上存以当前节点结尾的串(数的二进制形式)的数目,和以该串为前缀的串的数目,便可在位模式长度时间内进行元素增添、删除和以上问题的求解。但当元素数值过大,可能出现时间常数过大的问题,并且空间需求不易估计。
2013-07-29 11:12:45
662
原创 catalan数
空占位置 待补完http://baike.baidu.com/view/2499752.htm?fromId=1163998hdu 3723
2013-07-18 20:30:41
423
原创 hdu 3926 特殊同构图+并查集
关键是注意到,每个点的度至多为2,所以整个图是由一些独立的链和环构成的。然后统计某种链或是环的个数,如果同种链或环的数目相同,则是同构图。#include #include #include #include using namespace std;#define maxn 10010struct bcj { int fa,num; boo
2012-11-02 11:07:03
665
原创 hdu 1598 枚举+并查集
联通起始点的边权范围就是这些边权的最大最小值,而边数为1000,所以可以枚举这个范围,然后判断对于每一个范围是否联通。进一步的,可以枚举最小值并依此加入更长边,直到起始点联通,得到该最小值下的最优解。#include #include #include #include #include #include #include using namespace std;#d
2012-11-02 10:13:24
416
转载 图论500题
转载出处:http://blog.csdn.net/ffq5050139/article/details/7832991=============================以下是最小生成树+并查集======================================【HDU】1213 How Many Tables 基础并查集★1272 小希的迷宫
2012-10-25 19:34:32
6740
原创 RMQ——ST算法
templateclass RMQ{ T **f; int n1; int n2; bool (*cmp)(const T &a,const T &b); bool compare(const T &a,const T &b) { if(cmp==NULL) return a < b; return cmp(a,b); } void
2012-10-12 15:40:09
443
原创 解同余式
#include #include using namespace std;#define MP make_pairpair > func1(int a,int b) { int g; if(!g) return MP(0,MP(0,0)); pair c(MP(1,0)),d(MP(0,1)),tmp; while(a%b) { in
2012-10-12 14:08:33
732
转载 大数模板——来自jxy师兄
#include #include #include #define MAX 1300#define base 10000#define baselen 4using namespace std;//int countnub = 0;//此大整数类用数组 digital[MAX]表示一个大整数;//一个 digital表示最大为 9999;//len 表示目前整数的用到最大di
2012-10-10 18:49:10
341
转载 后缀数组(模板)——来自MovingforACM
转载自:http://blog.sina.com.cn/s/blog_9ddf28c5010119e1.html后缀数组(模板) 今天学习了后缀数组,感觉只有排序部分比较纠结,整个算法还是比较好懂的,把排序跳过来理解这个算法,其实它比kmp还要简单,下面贴一段排序和求最长公共前缀的模板,以后还会更新,把对整个算法应用的理解写上去。 排序主要有两种:倍增法和DC3,求lcp的
2012-10-10 18:21:32
396
原创 hdu 2296 AC自动机+dp+路径记录
Ring#include #include #include #include #include #include using namespace std;#define pb push_back#define INF (1<<30)struct node{ int son[26],fail; int cnt; char key; node(
2012-10-10 18:13:47
539
原创 hdu 3341 AC自动机+五维dp
Lost's revenge#include #include #include #include #include #include #include using namespace std;#define pb push_backstruct node { int son[4],fail; int cnt; node(){cnt=0,fail=0
2012-10-10 18:09:47
623
转载 矩形面积和矩形周长并的模板——来自notonlysuccess
矩形面积并hdu1542 Atlantis题意:矩形面积并思路:浮点数先要离散化;然后把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用cnt表示该区间下边比上边多几个,sum代表该区间内被覆盖的线段的长度总和这里线段树的一个结点并非是线段的一个端点,而是该端点和下一个端点间的线段,所以题目中r+1,r-1的地方可以自己好好的琢磨一下线段树操作:update
2012-10-10 17:38:06
1142
原创 hdu 2825 AC自动机+状压dp
Wireless Password题意:给m个串(m#include #include #include #include #include using namespace std;#define mod 20090717#define pb push_back#define lowbit(x) ((x)&(-x))struct node{ int son[26
2012-10-07 19:19:43
633
原创 hdu 2243 AC自动机+矩阵快速幂
考研路茫茫——单词情结题意:这题和poj2778没有本质区别,都是通过AC自动机得到递推矩阵,然后矩阵快速幂。递推的状态都是长度和单词结尾在trie树上的位置(最长公共字串,trie上是前缀,在递推的单词上则是后缀)。但这题会多些线性代数的技巧,例如求26^1+……+26^n要用二阶矩阵,还要用长度恰好为l的矩阵去构造长度小于等于l的递推矩阵。#include #include #
2012-10-07 15:05:22
598
原创 poj 2778 AC自动机+矩阵快速幂
题目:DNA Sequence这题做了一晚上,即使大体的思路明白了,但还是纠缠与各种细节的实现#include #include #include #include #include #include using namespace std;#define mod 100000#define pb push_backstruct node { int son
2012-10-06 22:43:05
425
原创 划分树——求区间第k大值
题目:K-th Number虽说是第一次就AC,但到网上去搜罗更优代码时,却幸运的发现,我的AC代码是错误的,只不过数据太水。我考虑掉一种情况,当有多个数和中位数相同时,如果从左到右一次将小于等于中位数的数划入左子树,可能导致区间右端的哪些比中位数小的数被划入右子树。例如,数据为1 2 2 2 1时,第二个2应划入右子树,最后一个1应划入左子树。#include #include
2012-10-06 18:34:46
1338
原创 线段树——区间合并
题目:Hotel题意:区间初始全0。两种操作:将区间某一段置0;查询超过指定长度的区间的最左端点(多个区间则取最左)第一次做错,错在查询时,只是查询整个区间的最长连续子区间,可题目要求的只是超过一定长度的子区间,而不一定是最长的,所以应按左区间,跨左右区间,右区间的顺序递归查找满足要求的子区间。#include #include #include using namespac
2012-10-06 15:38:42
1037
原创 hdu_1100_Trees_Made_to_Order
Trees Made to OrderTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 465 Accepted Submission(s): 271Problem DescriptionWe can n
2012-08-13 18:29:35
940
原创 1001_Capturing_a_country
题目:hdu_4340_Capturing_a_country官方题解:树dp。显然题中给图的是一颗树。问题可以抽象成对树的每个点都染色,有两中颜色可以选择。我们可以知道,如果某一个连通的点集染的是同一种颜色,则这个集合中只要而且必须有一个点取完整的费用,其他的点都只需要对应费用的一半。状态:dp[i][j][k] (0 若选取1为根节点,则最后需要的结果为:
2012-08-12 07:04:34
601
原创 1004_History_repeat_itself
题目:hdu_4342_History_repeat_itself官方题解:1)To solve the N-th non-square number:There is a number K: K^2Thus : K^2+1So: (K-1/2)^2+3/4=K^2-K+1 That is to say: K-1/2 the N-th non-square
2012-08-11 21:45:33
354
原创 1003_Gold_miner
题目:hdu_4341_Gold_miner官方题解:显然,必须先拿走前面的金子才能拿后边的,所以排序处理共线情况。然后进行背包即可个人理解:有两种方法处理共线情况。但都以将点按斜率排序为前提。方法一:将统一斜率的N个点看做N个物品,第一个是第一个点,第二个是前两个点的和……第N个是前N个点的和。前后指的是靠近原点的程度。方法二:递推方程在原0/1背包的
2012-08-11 21:08:32
501
原创 1011_Xiao_Ming's_Hope
题目:hdu_4349_Xiao_Ming's_Hope 官方题解:本题为Lucas定理推导题,我们分析一下 C(n,m)%2,那么由lucas定理,我们可以写成二进制的形式观察,比如 n=1001101,m是从000000到1001101的枚举,我们知道在该定理中C(0,1)=0,因此如果n=1001101的0对应位置的m二进制位为1那么C(n,m) % 2==0,因此m
2012-08-11 20:38:50
727
原创 1007_Permutation
题目:hdu_4345_Permutation 官方题解: 循环节的长度为各独立置换环长度的最小公倍数。问题即求相加和为N的正整数的最小公倍数的可能数。由于1不影响最小公倍数,问题转化为相加小于等于N的若干正整数的最小公倍数的可能数。如果这些正整数包含大于一个质因子,只会使得正整数的和更大。因而问题再次转化为相加小于等于N的若干质数的最小公倍数的可能数。N于是
2012-08-11 19:33:18
560
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人