poj
TIMELIMITE
Time is not enough. I must hurry up !
展开
-
poj 1185 炮兵阵地 状压dp
// poj 1185 炮兵阵地 状压dp // 这题和之前做的棋子的差不多,只是这个比之前的变化了一个条 // 件,这个条件让的我们不得不考虑在这个状态之前的状态,即在 // 一个状态中记录另外一个状态,说的可能有些绕 // 这么说吧: dp[i][S][V]表示第i行状态为S(仍然是二进制的数字 // 表现形式,比如5是101,表示第一列和第三列放炮兵),第i-1行 // 的状态为V(同样是二原创 2015-04-10 19:51:10 · 766 阅读 · 0 评论 -
poj 2187 凸包上的直径 - 旋转卡壳
// poj 2187 凸包上的直径 - 旋转卡壳 // // 解题思路: // // 裸地凸包 + 旋转卡壳的对踵点 // // 感悟: // // 对于凸包倒是很好理解,就是判断走的方向在当前方向的左侧或右侧, // 左侧表示是凸包上的点,右侧就退栈,直到是为止. // // 对于旋转卡壳,挑战上的转到法线方向不是很明白.倒是网上说的用的 // 三角形的面积这种算法倒是更好理解一些~~~原创 2015-10-29 22:34:06 · 547 阅读 · 0 评论 -
poj 3667 Hotel 区间合并
// poj 3667 Hotel 区间合并 // // 题目大意: // // [1,N]区间内开始为空,有两种操作 // 1) 1 a 找到长度为a的区间,并且尽量开头靠左,返回最左的位置 // 并check in. // 2) 2 a b 将[a,b-1]区间check out. // // 解题思路: // // 线段树-区间合并,对于每个节点记录三个值. // lsum表示该原创 2015-10-30 17:10:02 · 516 阅读 · 0 评论 -
poj 1182 食物链 - 并查集
// poj 1182 食物链-并查集 // // 这题我重新看了一下,以前一直不已为意,觉得理解就差不多了 // 现在发现,理解了,也不一定能够敲出来,哎,果然太久没做题了 // 都生疏了,这道题,将每个生物分成3类,A,B,C. // 对于第一种操作,只要在合并之前检查一下是否合法,合法,则将 // 该种生物的三类都合并 // 对于第二种操作,同样,合并A与B,B与C,C与A //原创 2016-01-04 21:16:50 · 476 阅读 · 0 评论 -
poj 1741 Tree 点分治
// poj 1741 Tree 点分治 // 题目链接: // http://poj.org/problem?id=1741 // 题目大意: // 给定一棵N(1<=N<=10000)个结点的带权树,定义dist(u,v)为u,v两点间的最短路径长度, // 路径的长度定义为路径上所有边的权和。再给定一个K(1<=K<=1e9),如果对于不同的两个 // 结点原创 2016-10-14 08:53:22 · 646 阅读 · 2 评论 -
poj 1273 Drainage Ditches 网络流 Edmond Karp || Dinic
// poj 1273 Drainage Ditches 网络流 Edmond Karp || Dinic // 题意: 裸的网络流,点数200,边数200 // 解答:经典的ff算法由于效率受容量限制,对于此题,容量可能大于10000000, // 所以采用EK算法,EK的效率是n*m*m,对于此题,可以在时限内解答. // Ford-Fulkerson:由残余网络出发,每次寻找流原创 2017-05-28 15:08:23 · 443 阅读 · 0 评论 -
poj 3734 简单快速幂
// 开始想的是RGBY,4x4...结果发现进行不下去 // 原来是简单的计数就好,分类讨论 // A:同偶 // B:单偶 // C:无偶 // 那么从第i个格子,到第i+1个格子涂色的话 // A(i+1) 2 1 0 A(i) // B(i+1) = 2 2 2 x B(i) //...原创 2018-06-12 21:40:04 · 290 阅读 · 0 评论 -
poj 1769 dp + 线段树
// 哎没想到dp啊,后续状态基于当前状态,当前状态不会影响后续状态,dp dp dp // // dp[i][j] 第i个sort的时候 最大数在j所需要的最短sort数则 // // dp[i + 1][j] = dp[i][j] 当第i段sort[si,ti] 中 ti != j (即舍弃此sort) // dp[i + 1][j] = mi...原创 2018-06-13 20:06:46 · 269 阅读 · 0 评论 -
poj 2991 Crane 线段树 + 区间更新
// 做法: 线段树 + 区间更新 + 简单计算几何 // 开始的时候在“挑战”这本书上看到,完全是懵逼状态,啥也不知道,就记一个向量旋转 // 之后仔细想了想,旋转角统一转换成向量的形式,对某个s旋转angle角度,就是将s后 // 所有的向量旋转angle角度。这样线段树区间更新的意义就出来了。所以线段树维护的 // 就是每段的向量,即x,y坐标值,还有lazy标签,注意的是:题目输入的是...原创 2018-06-07 22:01:47 · 276 阅读 · 0 评论 -
poj 2104 简单归并树 + 二分
// 感悟: 做法如果看一下挑战,应该还是很简单的吧 // 主要是刚开始看不习惯,线段树每一段表示一段序列 // 刚好是归并排序的序列,然后二分计数。归并树build // 的时候多了个merge阶段,这段复杂度即为nlog(n),之 // 后对数x进行二分查找log(n),目的是为了找出线段树 // 中不小于x的数的数目,此阶段会对线段树log(n)个段 // 进行每段二分log(n)。所以复...原创 2018-06-09 19:39:47 · 224 阅读 · 0 评论 -
poj 1127 Jack Straws 几何 + 弗洛伊德
// poj 1127 Jack Straws 几何 + 弗洛伊德 // // 解题思路: // 两两之间,如果相连,则连一条边,最后用弗洛伊德求闭包. #include #include #include #include #include #include #include #include #define For(x,a,b,c) for (int x = a; x <原创 2015-10-28 20:25:43 · 569 阅读 · 0 评论 -
poj 3237 Tree 树链剖分
// poj 3237 Tree 树链剖分 // // 解题思路: // // 树链剖分,维护一个最大值和一个最小值, // 区间更新,laz标记.单点更新,去掉叶子节点的laz // 标记.边权改为离根节点较远的点的点权.求lca // 的方式进行区间更新.注意线段树的操作以及push_up() // push_down()的操作.写了很久,感悟颇多,继续加油吧~~~ #include原创 2015-09-19 23:58:03 · 475 阅读 · 0 评论 -
poj 2528 Mayor’s posters 线段树
// poj 2528 Mayor’s posters // // 题目大意: // 给你n张海报,每张海报是一段区间,问最后由几张还好能露出来 // // 解题思路: // 线段树,别看那海报的区间范围很大,其实那些都没用.n才10000呢 // 将区间离散化之后,然后在进行线段树的操作,但是注意在相差大于1 // 的区间中间加上一个值,这样讲两个区间区分开,然后就是基本操作了 // 挺好想原创 2015-11-03 21:16:22 · 525 阅读 · 0 评论 -
uva437 poj2241 The Tower of Babylon dp
// 这题开始在算法竞赛入门经典的书上状态表示 // dp[i][j]表示前i个方块以第j条边为高所能得到的最大高度值 // dp[i][j] = max(dp[0...i-1][0,1,2]+block[i][j]); // 就是一个DAG模型 // 这样记忆化搜索就行啦,还是有些技巧的 // // 第二种做法就是递推 // 首先把一个方块变为6个,即表示长,宽,高 // 当然,首先得要把底面积原创 2015-04-17 17:39:09 · 868 阅读 · 0 评论 -
poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的是数据结构做,也可以递推做,目前只会数据结构的 // // 对于每个高度h,求一个左边界L和右边界R,分别表示的意义是 // L是下标为j的矩形的高度的hj小于当前h的最大的j的值。则根据定义 /...原创 2015-06-05 22:53:39 · 776 阅读 · 0 评论 -
poj 2774 Long Long Message 后缀数组
// poj 2774 Long Long Message 后缀数组 // // 题目大意: // // 求两个串的最长公共子串. // // 解题思路: // // 后缀数组.将两个字符串用一个不出现在两个字符串的其他字符连接,并在最后 // 同样用一个字符作为结束.一个串的子串,一定是某个后缀的前缀.求出height数组 // height[i]表示sa[i-1]和sa[i]的公共前缀L原创 2015-08-10 15:39:43 · 686 阅读 · 0 评论 -
poj1861 最小生成树 prim & kruskal
// poj1861 最小生成树 prim // // 一个水题,为的只是回味一下prim模板,日后好有个照应不是 #include #include #include #include #include using namespace std; const int MAX_N = 1008; const int INF = 0x3f3f3f3f; int g[M原创 2015-07-29 21:13:46 · 735 阅读 · 0 评论 -
poj1125 Stockbroker Grapevine 最短路 dijkstral + 优先队列
// poj1125 Stockbroker Grapevine 最短路 dijkstral + 优先队列 // // 一个模板吧,留着纪念 #include #include #include #include #include using namespace std; typedef pair P; const int MAX_N = 108; const i原创 2015-07-31 13:03:50 · 737 阅读 · 0 评论 -
poj1511 最短路 spfa
// poj1511 最短路 spfa // // Bellman-Ford 队列优化 // // 留个spfa模板,精髓就是不断松弛,并将可能会影响 // 结果的点,如果在队列中不用加,不在就加入。 #include #include #include #include #include typedef long long ll; using name原创 2015-07-31 15:09:45 · 676 阅读 · 0 评论 -
poj 2823 单调队列
//单调队列求滑动窗口的最大值和最小值 //题意是给一个n个数,在每k个数区间内 //求最大值和最小值 //单调队列:队列中的元素是单调的。 //求最小值的时候:进队的时候将队尾部大于当前要进的元素全部出队 //这样,队列的头部就是最小值 //反之,求最大值也是一样 #include #include #include #include using namespace std; co原创 2015-07-22 22:26:31 · 733 阅读 · 0 评论 -
poj 2763 Housewife Wind 边权的树链剖分
// poj 2763 Housewife Wind 边权的树链剖分 // // 题目意思很清楚,关于边权的树链剖分,首先 // 肯定是先把链剖分好啦,然后就是将边权转化 // 成离根节点较远的点的权值即可.单点更新, // 区间求和,注意,莫要重复计算哟,这题还有需要 // 研究的地方,继续加油吧~~~ #include #include #include #include #defi原创 2015-09-08 17:33:39 · 590 阅读 · 0 评论 -
poj 2778 AC自动机 + 矩阵快速幂
// poj 2778 AC自动机 + 矩阵快速幂 // // 题目链接: // // http://poj.org/problem?id=2778 // // 解题思路: // // 建立AC自动机,确定状态之间的关系,构造出,走一步 // 能到达的状态矩阵,然后进行n次乘法,就可以得到状态间 // 走n步的方法数. // 精髓: // 1):这个ac自动机有一些特别,根节点是为空串,原创 2015-08-06 20:39:03 · 838 阅读 · 0 评论 -
poj 2686 状压DP
// 挑战上的状压例题,感觉思路挺清晰,但是很难想... // 不过学到了一个套路,那就是转换成DAG进行DP,很妙 // 车票状态为第一维度,顶点为第二维度。 // DP[S][u]表示在u点时,车票状态集合为S的最小花费。 // 则状态转移为在u点找一张车票i,找一个点v. // DP[S \ i][v] = min(DP[S][u] + dist[u][v...原创 2018-06-10 23:42:37 · 230 阅读 · 0 评论