自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一点一点的进步

  • 博客(55)
  • 资源 (4)
  • 收藏
  • 关注

转载 POJ 图论 专辑

转自http://blog.csdn.net/allenjy123/article/details/6627248 红色已经AC 一、最短路 POJ 2449 Remmarguts' Date(中等) http://acm.pku.edu.cn/JudgeOnline/problem?id=2449 题意:经典问题:K短路 解法:dijkstra+A*(rec),方法很

2012-08-10 16:53:37 1724

原创 POJ 3642 长方体体积并 线段树 扫描线

这题就是给出了好多个长方体, 求出那些被覆盖了 3次及以上的体积 我们注意到z的范围很小,而且就给了1000个长方体 那么可以把z坐标离散化 然后在相邻的z坐标空间内,就变成了求面积覆盖 记录三个变量,代表一次覆盖,两次覆盖,三次覆盖及以上 #include #include #include #include #include #include #include

2012-08-29 14:24:20 1325

原创 POJ 2201 RMQ 笛卡尔树

给出一些结点 每个节点有两个关键字 要求构造一棵树 第一个关键字满足二叉搜索树的性质,第二个关键字满足小堆的性质 和1785几乎一模一样 题目还让输出yes 或者no  实际上,因为所有的第一关键字互异,第二关键字也互异,所以一定能构造出来这样的树 这题不用treap的原因我嫌treap有点麻烦,还旋转啥的,没RMQ直观好想 #include #include #include

2012-08-26 15:43:57 1634

原创 POJ 2114 树的分治

这题跟1741的不同之处在于查找==k的是否存在 修改一下统计函数即可 #include #include #include #include #include #include #include #include #include #define eps 1e-5 #define MAXN 11111 #define MAXM 55555 #define INF 100000

2012-08-26 12:44:05 2071

原创 POJ 2104 归并树 or 划分树

首先写一下归并树的版本吧 归并树实际上是一种类似于归并排序外加线段树的东西 用到线段树的地方就是划分区间。 我们都知道,线段树是一层一层这样下来的,每层上有若干个区间。 归并树的作用就是,对每一层上的所有区间,其内部都是排好序的。 也就是说,第一层是所有数排好序,第二层划分了两个子区间,两个子区间内部都是排好序的。依次直到叶子结点 当然,建树的过程跟线段树是一样的,只不过在递归的过程中

2012-08-25 23:44:46 1172

原创 POJ 2051 堆

这题就是一个小顶堆而已 注意结构体里小于号的重载  重载结果的不同会导致写法的不同 #include #include #include #include #include #include #include #include #include #define eps 1e-5 #define MAXN 111111 #define MAXM 111111 #define I

2012-08-24 16:59:09 690

原创 POJ 2010 堆

这题实际上是考察了堆的插入与删除操作,用到的是大顶堆 有人用二分过的此题,我觉得二分的边界处理应该比较麻烦吧,尤其如果数据中出现有分数相同的,确实不好处理 比较直观的思想就是堆了。 我们首先按照分数来进行排序,排序后进行枚举,对枚举的每个位置,看该位置之前最小的n/2个需求与该位置之后的最小的n/2个需求的和是否满足要求。 实际上预先处理一下就可以了,先从头到尾进行扫,将每个位置的元素插入

2012-08-23 00:35:45 1071

原创 POJ 1785 treap 或 RMQ

本题大意就是。 建立一颗树,每个结点有两个关键字,要求第一个关键字满足二叉搜索树的性质,第二个结点满足堆的性质 首先,要把所有结点按照第一个关键字按非递减排序,这样之后,每个结点左边的结点都比该结点的第一个关键字小,右边的则第一个关键字都比他大。 这样的话按顺序每次插入右子树,因为要满足二叉搜索树的性质, 插入之后不能满足堆的性质时就左旋。 #include #include

2012-08-22 14:33:51 2047

原创 POJ 1741 树的分治

题意就是求树上距离小于等于K的点对有多少个 n2的算法肯定不行,因为1W个点 这就需要分治。可以看09年漆子超的论文 本题用到的是关于点的分治。 一个重要的问题是,为了防止退化,所以每次都要找到树的重心然后分治下去,所谓重心,就是删掉此结点后,剩下的结点最多的树结点个数最小。 每次分治,我们首先算出重心,为了计算重心,需要进行两次dfs,第一次把以每个结点为根的子树大小求出来,第二次是从

2012-08-22 02:09:08 9997 2

原创 POJ 1733 并查集 偏移向量

这题也是用到了偏移向量 一个由0,1组成的数字串~~,现在你问一个人一些问题,第i位到第j位的1的个数为奇数还是偶数。他会告诉你答案, 但是答案可能会自相矛盾,现在就是最多能有前几个回答是不矛盾的。 设r[i]表示第1位到第i位的1个数的奇偶状况,r[i] = 0表示有偶数个1,r[i] = 1表示有奇数个1。 那么要是第i位到第j位为偶数个1时,r[i-1] = 1, r[j] = 1

2012-08-21 11:55:10 1756

原创 POJ 1577 二叉搜索树

这题前边说了一堆废话  大意就是给出了一个二叉搜索树,但给出的方式比较奇怪,是删除叶子的顺序。 即把树上的叶子结点给出,然后揪掉这些叶子,把剩下的结点中变成叶子结点的再给出,这样一直到所有的结点都被揪掉。 最后要求这个二叉搜索树的先序遍历 这题解决的方式很简单,按照他给的那些东西,倒着建立二叉搜索树就行了。 为什么呢?  我们观察一下,可以发现,最后一个揪掉的一定是根节点,再往上,每一次揪掉

2012-08-20 23:48:37 2953

原创 POJ 1451 字典树

这题的意思有点类似于一个输入法,就是按了一些键,蹦出单词库中频率最高的那个词汇 首先给出的是单词库,每个单词有一个出现频率。 然后给出的是一些询问,每个询问有一个字符串,代表在手机上按了哪些键,最后以1结束。问进行这些按键的过程中出现的单词分别是哪些。 思路就是字典树了。 以手机的8个键做8个指针来建立字典树。 每个结点存的除了指针外,还有出现频率最高的单词。 建树的时候需要注意,每个

2012-08-20 21:48:44 1837

原创 后缀数组 不重叠最长重复子串 POJ 1743

题意:有N个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题。“主题”是整个音符序列的一个子串,它需要满足如下条件:     1.长度至少为5个音符。     2.在乐曲中重复出现。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值)     3.重复出现的同一主题不能有公共部分。 首先看到转调,这很重要,一个序列中的数加上同

2012-08-20 14:39:20 803

原创 后缀数组之最长公共子串 poj 2774

用后缀数组求两个串的最长公共子串的长度 详见罗穗骞的论文 #include #include #include #include #include #include #define MAXN 1000005 using namespace std; int r[MAXN]; int wa[MAXN], wb[MAXN], wv[MAXN], tmp[MAXN]; int sa[MA

2012-08-20 12:51:32 1056 1

原创 后缀数组习题

原文:http://hi.baidu.com/lewutian/blog/item/4d098138d29c34f9b311c725.html 单独把它列出来是因为这个东西真的很神奇~~~ 后缀数组经典思想:多串合并+二分答案+最优性--->可行性 例 1 :最长公共前缀 给定一个字符串,询问某两个后缀的最长公共前缀。   // 直接套用,ans=min( heig

2012-08-19 13:23:09 3272

原创 POJ 1204 AC自动机

题目就是给出了一个矩阵,由大写字母构成,然后让你查找某些单词在矩阵中出现的位置 出现的方式可能有8种,从某个位置往北连续的字符串,往东北,东........八个方向的只要有满足的 就可以 最后输出位置和方向,然后往北的输出时为A,东北的是B,依次顺时针类推 #include #include #include #include #include #include #inclu

2012-08-19 01:40:33 1253

原创 POJ 1200 字符串hash

这题没说n的范围。不过根据推测应该是不会很大,否则肯定会TLE 不过这样它仍是一道好题,题的好坏跟难易度没有太大的关系。关键是想法很重要 这题巧妙在将字符串看做一个nc进制的数,很显然,如果两个数在nc进制下不同,在十进制下也是不同的  然后根据这个转成10进制来搞就行了 #include #include #include #include #include #include

2012-08-18 15:11:53 1052

原创 常用字符串hash函数

[cpp] view plaincopy 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用      位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,      这些函数几乎不可能找到碰撞。      常用字符串哈希函数有BKDRHash,APHash,DJBHas

2012-08-18 15:07:40 1131

原创 POJ 1186 hash 线性探测再散列

一直以来我都觉得线性探测再散列这个方法一定很低效 结果碰到今天这题之后我惊奇的发现 链表居然被线性探测再散列秒杀了 这个hash方法是将大数取模,放到一个位置上,如果这个位置被占用了,就往后移1格,再被占再移动知道能 放到某个位置上。详细见数据结构书 真是太神奇了 懒得写DFS  直接for的 所以代码看起来比较多,但是也比较直观了 #include #include #i

2012-08-18 14:19:00 1359

原创 POJ 2019 二维RMQ

题意很简单 就不说了 为了把它推广成矩形的 写了这种查询是O(n)的方法 当然还有O(1)的矩形的方法了 只不过太麻烦了 但是对于正方形来讲 还是比较好弄的 #include #include #include #include #include #include #include #include #include #include #include #def

2012-08-17 17:10:35 1808 1

原创 POJ 2452 RMQ+二分

解法是 枚举每个位置i,找出i右边比第一个比a[i]小的a[j]的位置j 在i到j - 1中间求最大值的位置k 如果a[k] > a[i] 那么更新答案 #include #include #include #include #include #include #include #include #include #define eps 1e-5 #define M

2012-08-17 15:55:02 805

原创 POJ 1986 Distance Queries LCA和RMQ

这题以前用tanjan做过 现在再做一遍 用RMQ的方法。  大意就是求一棵树上任意两点的距离 先DFS跑出欧拉序列 然后根据pos直接RMQ就行了 #include #include #include #include #include #include #include #include #include #define eps 1e-5 #define MAXN

2012-08-17 14:10:25 944

原创 POJ 3368 RMQ

此题用线段树也能做 用RMQ也能做 当然RMQ的速度比线段树要快很多  #include #include #include #include #include #include #include #include #include #define eps 1e-5 #define MAXN 111111 #define MAXM 11111 #define INF 1000

2012-08-17 13:14:57 1473

原创 RMQ问题之ST算法

ST算法的基本原理百度一下就可以知道   RMQ(Range Minimum/Maximum Query)问题是求区间最值问题。可以写一个线段树,但是预处理和查询的复杂度都是O(logn)。这里有更牛的算法,就是ST算法,它可以做到O(nlogn)的预处理,O(1)!!!地回答每个询问。     来看一下ST算法是怎么实现的(以最大值为例):             首先是预处理,用一个D

2012-08-17 02:13:29 6601 2

原创 HDU 4374 单调队列优化 DP

这题的转移很明显。 用dp[i][j] 表示到达i层j位置时的最大得分 sum[i][j] 表示第i层前j个数的和 dp[i][j] = max(max(dp[i - 1][j + k] + sum[i-1][j +k-1] - sum[i - 1][j - 1] + score[i][j]), max(dp[i - 1][j - k] - sum[i-1][j -k] + sum[i -

2012-08-16 21:50:49 1756 1

原创 POJ 4370 0 or 1 图论模型的转化

这题的优点就在于模型的转化 转化完就是个非常简单的最短路了 显然,题目给的是一个0/1规划模型。 解题的关键在于如何看出这个模型的本质。 3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论: 1.X12+X13+...X1n=1  于是1号节点的出度为1 2..X1n+X2n+...Xn-1n=1 于是n号节点的入度为1 3.∑Xki

2012-08-16 20:18:30 774

原创 POJ 1985 树的直径(最长链)

题目大意就是求一棵树上距离最远的两个顶点的距离 说是一棵树是因为之前1984题面上说过 然后据说2631跟此题一样 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一;树的直径:树上的最长简单路径)。再从找到的点出发,找到据该点的最远点,那么这两点就确定了树的一条直径,两点间距即为所求距离。 这个用反证

2012-08-15 19:49:15 3593

原创 POJ 1419 Graph Coloring 图的着色 最大团问题

这题是显然的最大独立集问题。 最大独立集问题和最大团问题可以转化的 最大独立集=补图的最大团 最大团的意思跟最大独立集正好相反,是取尽量多的点使得这些点任意两点之间都有边 而最大团一般是DFS回溯来解。。。复杂度太高了 竟然还能过 #include #include #include #include #include #include #include #include

2012-08-15 13:21:08 1182

原创 HDU 4366 树转化为连续序列 线段树

这题跟 http://poj.org/problem?id=3321 这题的转化形式基本一样 本题给的是一棵树。 然后找子孙中能力值大于父节点并且忠诚最高的。 由于树的结构不好搞线段树,所以要映射到一个连续序列上搞,把这个结点的子树都能映射到一个连续区间上就好办了。 很常见的套路就是DFS时间戳,记录进入结点的时间戳和出结点的时间戳,两个时间戳之间的都是这个结点的子孙结点了。 而我们要找能

2012-08-15 00:52:54 1149

原创 HDU 4360 最短路变形

题目大意是 给一个n个点m条边的无向图。 每条边有权值和一个字母标号,字母标号有四种 'L' 'O' 'V' 'E' 现在要从1点到n点去 找求找到一条路径,路径按顺序构成了若干个LOVE 注意必须是完整的LOVE 然后要求有LOVE的的条件下路径最短,如果有多条最短路,找LOVE最多的那条 思路就是拆点 将每个点分为四个,代表L,LO,LOV, LOVE四种状态 然后跑spfa即

2012-08-14 18:35:32 1349

原创 POJ 4047 Garden 线段树

这题只要想出怎么建树就简单了吧。 他问的是连续k个值最大的是多少 就可以用1~k之和,2~k+1之和,3~k+2之和.......做为结点。 然后就发现,变成了简单的区间更新和区间查询问题了。 #include #include #include #include #include #include #include #include #include #define e

2012-08-14 02:22:38 1205

原创 POJ 4046 Sightseeing 最短路

题意就不再赘述了 黑书上308页例1是极其相似的题。。。。 思路也一样 枚举每个点作为吃饭的地点。 每次以枚举的这个点为起点做最短路,途中不能走比它贵的点。 每次求出最短路后要更新我们的查询答案。更新其实也就是一行的样子。 假设查询的两个点有个最优的方案,那么路径上有某点是吃饭的地点,那么从该点出发按刚才的方法一定能找到查询的那两个点。 据称本题卡常数,我最后用了3400ms 的样子

2012-08-13 20:36:19 903

原创 SPOJ 412 K-path cover 匹配

http://hi.baidu.com/roba/blog/item/c842fdfac10d24dcb48f31d7.html roba的解说 题目链接 题目大意就是说,给N个点,每个点都有一个权值,某些点之间存在有向边,有向边的权值为它的两端点权值之和。现在要求从中选出K条边,使得没有任何两条边共头或共尾,问K条边的权值和最小为多少。数据范围大的吓人,

2012-08-13 19:20:22 2203

原创 SGU 206 Roads KM算法 匹配模型的转化

这是一道非常好的题目 题目大意: 给了一个图,n个点,m条边,其中前n-1条边保证是生成树,现在你可以修改每条边的边权,花费为修改量,然后用最小的花费修改使得前n-1条边为最小生成树 这题乍一看无从下手 实际上可以这么分析 边可以分为两类,一种是前n-1条边,构成了一个生成树,其他的边是另外一种边 显然如果我们要达到最小生成树的目的,就要让生成树上的边变小,而另外的边变大 从第n条边

2012-08-12 16:11:44 1518

原创 HDU 1853 Cyclic Tour KM算法

此题的模型转化比较好 题目说是有向图,把图分成一些环,使得构成这些环总的边权值最小, 环的特性是最少两个点。 观察环这个限制,实际上就是每个点有且只有一个出边,有且只有一个入边,并且不能是自环 这可以跟匹配联系起来,将每个点拆成u, u' 然后 如果有一条边(u,v, w)就建一条(u, v ', w)的边 最后求匹配,如果左边的点都匹配到了,显然是每个点都有了一个出边,右边的点都

2012-08-11 17:14:50 875

原创 POJ 3686 The Windy's KM算法

这题的建图实在是太神了 假设某个机器处理了k个玩具,那么对于这些玩具,有两种时间,一种是真正处理的时间,一种是等待的时间,等待的时间就是之前所有处理的玩具的时间, 假设这k个玩具真正用在加工的时间分为a1,a2,a3...ak, 那么每个玩具实际的时间是加工的时间+等待时间,分别为 a1, a1+a2, a1+a2+a3.......a1+a2+...ak     求和之后变为 a

2012-08-11 16:20:59 1156

原创 POJ 2516 Minimum Cost KM算法 或者 最小费用最大流

这题还是挺裸的 当然 是用最小费最为方便。建图一目了然 KM麻烦那么一点,就是每个物品要拆成一份一份的。 建图的时候注意,KM匹配的模板一定是左边的点数不大于右边的点数  至少我的模板是这样的 在本题中,要求供应商提供的东西要满足商店的需求,不能满足就直接输出-1, 所以理论上商店的点应该比供应商少,商店的点应该放在左边,供应商放在右边 由于是最小权匹配,所以我这里用了一个比较大

2012-08-11 14:55:08 1610

原创 POJ 2400 KM算法 最小权匹配 回溯输出所有最优匹配方案

很蛋疼的一题  首先输入就很蛋疼, 据网上的神牛们纷纷说题目的矩阵给反了。然后按反着来还真给过了 KM的话 由于是 n与n的匹配,所以直接取负求KM毫无压力 但是如果两边点数不等,据说会有问题     #include #include #include #include #include #include #define MAXN 505 #define MAXM 5

2012-08-11 11:10:49 1207

原创 POJ 2226 二分图 最小点覆盖

这题的建图比较神 首先要明白题意是要覆盖所有的污泥,而不能把草地也给覆盖了 刚开始我就把草地也给覆盖了,显然不行。 那么就需要划分为一个一个的线段来进行覆盖 将所有横着的线段分别预处理出来,每个线段给一个编号 同样所有竖着的线段预处理出来。注意只要是连续的几个污泥块就属于同一个线段,横着的和竖着的分别处理。 然后对每个污泥,用其所属的横线段的编号跟所属的竖线段的编号连边。 最后转化为

2012-08-10 19:56:35 844

原创 POJ 2594 允许有相交点的最小路径覆盖

这题跟传统的路径覆盖不同的是任意两条路径间可以相交点 这就需要进行一些改变 有一个大牛解释的非常好,如果一个机器人在路上走着,碰到了别的路径的点,那就直接飞过去好了。也就是直接到了之前间接能到的点。 那么我们事先用floyd把每个点能到达的点,不管是直接或者间接能达到的,处理一下 然后建图就好了 #include #include #include #include #inclu

2012-08-10 16:49:19 642

归并排序实现

使用C++实现了归并排序,有注释,简明易懂

2013-06-11

堆排序实现

使用C++实现了堆排序,有注释,简明易懂

2013-06-11

插入排序实现

使用C++实现了插入排序,有注释,简明易懂

2013-06-11

java 俄罗斯方块源码

代码可直接运行, 主要功能有基本的俄罗斯方块,加速,开始,暂停等

2011-12-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除