ACM
文章平均质量分 52
yanga11ang
an ACMer,team: Echo
展开
-
分块算法
感觉分块是一种很蛋疼的算法,但据说有的时候很好用 ( 分块算法可以维护一些线段树维护不了的东西,例如单调队列等,线段树能维护的东西必须能够进行信息合并,而分块则不需要 )。分块算法很多时候会把复杂度优化一个O( )。优化方式如下 一个规模为n 的问题, 我们将其变得有序, 令 x= 那么 我们可以将其划分为 块区域,分别为 [1 x] [x+1 2x] [2x+1 3x] ……[kx n原创 2017-07-17 14:36:27 · 2502 阅读 · 0 评论 -
SPFA模板
/* * Author : Echo * Email : 1666424499@qq.com * Description : SPFA * Created Time : 2017/8/29 15:52:11 * Last Modify : 2017/8/29 18:48:09 * File Name : SPFA.cpp */#i原创 2017-10-05 10:48:18 · 291 阅读 · 0 评论 -
最小费用最大流minCostMaxflow 模板
/* * Author : Echo * Email : 1666424499@qq.com * Description : * Created Time : 2017/9/25 16:52:26 * Last Modify : 2017/10/3 9:39:47 * File Name : MinCostMaxflow.cpp原创 2017-10-05 09:54:38 · 4304 阅读 · 0 评论 -
四边形不等式优化dp
关于四边形不等式优化dp的一点理解 我其实应该先学好几何证明 orz 前导算法 区间dp 基础几何证明算法干嘛 当区间dp 代价函数满足fun(i,j)+fun(i',j')<fun(i',j)+fun(i,j')时 通过减少 类区间dp 的决策区间,将其O(n^3) 的复杂度化为O(n^2)算法思路 区间合并时候,如果代价函数满足fun(i,j)+fun(i',j')<fun(i',j)原创 2017-07-23 11:15:43 · 372 阅读 · 0 评论 -
石子合并 nyoj737 四边形优化
题意:有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,并将新的一堆石子数记为该次合并的代价。求最小代价。思路我们假设dp[i][j]是从i到j区间的最优解。 我们想知道,能否像建塔一样,知道了底层的就可以建立高层的。 这里我们以 j-i 的值为dp分层,也就是分为区间长度为1的,2的,3的…n的。 一个问题摆在面前,能否用低层次的原创 2017-07-23 10:21:52 · 239 阅读 · 0 评论 -
HDU - 3507 Print Article 斜率dp
题意 打印一篇长度为n的文章,求最小代价 其中代价的计算公式为:一行元素权值加和的平方加上换行的代价,即下图公式: 思路 很容易想到用dp 状态转移也好写 dp[i]=min(dp[j]+(sum[i]-sum[j])^2+m); 然后随便的算一下复杂度 O(n^2) 再看一下数据范围 (0 ≤ n ≤ 500000, 0 ≤ M ≤ 1000) GG…….. 所幸我们可以优化原创 2017-07-21 17:35:25 · 204 阅读 · 0 评论 -
Corn Fields POJ - 3254 状态压缩dp
题意 一个m*n的矩阵里,每个位置有两种状态,可以种牧草用1表示,不能种用0表示。在这块牧场种牧草,要求两个相邻的方格不能同时种牧草(上下左右)。问有多少种种植方案(一块也不种也是一种方案)思路 输出里写着modulo 100,000,000 想都不想就dp, 每一行的状态很多,我们可以用状态压缩说明,变成01二进制 然后dp[i][j]=sum(不冲突的dp[i-1][k]) 其中dp第原创 2017-07-19 14:57:36 · 227 阅读 · 0 评论 -
三分查找
关于三分的一些理解一些需要知道的东西:定义: y = f(x) ; x 的取值 可以是离散的也可以是连续的 。y与x 在直角坐标系上的图像是单峰的,即只有一个最大值或最小值。三分查找的目的是: 给定区间 [L R] 求区间最值(凸的最大值 凹的最小值)在三分查找中用到的辅助变量有:l :三分查找的一个下界 ; r :三分查找的一个上界 ; mid : 上界和下界的中点 即 (l+r)/原创 2017-07-15 12:30:16 · 341 阅读 · 0 评论 -
单调栈、双端队列、单调队列
它们分别是栈和队列的变形,在某些时候会具有极大地价值。单调栈之所以被称作单调栈 是因为栈里面的元素是单调的。即,从栈顶到栈底是严格单调递增或递减的。 想要构成单调栈,对于入栈操作就需要作出一定的限制。 这里以单调递增栈为例进行说明:新增一个元素 需要将比他小的元素都出栈后才能加入。 例如 某次需要加入栈的元素依次为: 3 4 8 1 6 4 5 9 3进栈 (3) 3出栈 4进栈 (4)原创 2017-07-15 17:03:40 · 954 阅读 · 1 评论 -
Command Network POJ - 3164 有向图的最小生成树(最小树形图朱刘算法)
有向图的最小生成树(最小树形图朱刘算法)题意 给你N个点的坐标和M条有向边,问你以点1为根的最小树形图的边权之和。思路 套用朱-刘算法 求解最小树形图即可 复杂度O(EV)设根结点为v0,(1)求最短弧集合E0 从所有以vi(i ≠ 0)为终点的弧中取一条最短的,若对于点i,没有入边,则不存在最小树形图,算法结束;如果能取,则得到由n个点和n-1条边组成的图G的一个子图G’,这个子图的权值一原创 2017-10-14 14:25:11 · 381 阅读 · 0 评论 -
Slim Span POJ - 3522 最小生成树最大边和最小边之差最小
最小生成树最大边和最小边之差最小题意: 求最小生成树最大边和最小边的最小差值思路 用kruskal 算法,枚举最小边即可代码/* * Author : Echo * Email : 1666424499@qq.com * Description : * Created Time : 2017/10/10 19:25:26 * Last Mod原创 2017-10-14 16:34:15 · 566 阅读 · 0 评论 -
Frogs' Neighborhood POJ - 1659 havel定理
havel定理:判断度数序列是否可图(简单图)题意 未名湖附近共有N个大小湖泊L1, L2, …, Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤i ≤ N)。如果湖泊Li和Lj之间有水路相连(无向图),则青蛙Fi和Fj互称为邻居。现在已知每只青蛙的邻居数目x1,x2, …, xn,请你给出每两个湖泊之间的相连关系。 思路 直接贪心是有误的:1 2 3 2 0 用 havel原创 2017-10-15 17:41:59 · 247 阅读 · 0 评论 -
Network of Schools POJ - 1236 tarjan强连通分量
tarjan强连通分量题意: N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。2,至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。 思路 也就是: — 给定一个有向图,求: 1) 至原创 2017-10-15 16:16:57 · 260 阅读 · 0 评论 -
The Bottom of a Graph POJ - 2553 强联通分量中出度为零的点集
强联通分量中出度为零的点集题意 使用的图论的方式说明了一个新的定义,汇点的定义,v是图中的一个顶点,对于图中的每一个v能到达的顶点w,w也可达v,则称v为汇点。图的底部为图中顶点的子集,子集中的所有的点都是汇点,求图的底部。 思路 如果图的底部都是汇点,则说明底部中的任意两点都互相可达,则底部为强连通分量,并且没有出边,所以任务就变成求图的强连通分量并且出度为零的点集 代码/* * Aut原创 2017-10-15 18:20:04 · 300 阅读 · 0 评论 -
Popular Cows POJ - 2186 找金字塔顶点?
有向图中所有点都能到达的点题意 题目大概是有好多牛,牛(们)之间具有某种关系(鬼知道),这种关系具有传递性,如果有 A欢迎B和B欢迎C,那么就有A欢迎C。我们要找到能让其他所有的牛都欢迎的牛。 思路 画图易知 如果强联通分量中有多个缩点,出度为零,要么不成联通,要么联通也不能被所有牛崇拜,故而本题求的是唯一的一个出度为零的连通分量的规模 Ps:对于入度没有要求(画蛇添足必须死) 代码/*原创 2017-10-15 19:18:31 · 223 阅读 · 0 评论 -
Going from u to v or from v to u? POJ - 2762 是否为单向连通图
判断单向连通图 tarjan题意 给你一个有向图,问任意两点u,v 是否总存在V(u,v) 或 V(v,u) 思路 用tarjan算法将强联通分量缩点 判断生成树(不成树肯定错)是否退化成链 随便深搜一下最长链就好 Ps:这题数据水了 hack数据: 1 4 4 1 2 1 3 2 4 3 4 代码/* * Author : Echo * Email原创 2017-10-16 17:08:28 · 285 阅读 · 0 评论 -
Big Christmas Tree POJ - 3013 一种最短路的出题姿势
题意:给n个点从1到n标号,下面一行是每个点的权,另外给出m条边,下面是每条边的信息,两个端点+权值,边是无向边。你的任务是选出一些边,使这个图变成一棵树。这棵树的花费是这样算的,1号固定为树根,树中每个父节点下面的边都有个边权,然后边权乘上这条边的下面所有的子孙后代的点权和.题目换一个角度就会发现其实就是一个裸的最短路,即答案也是每个点权乘上从起点到终点的边权和,即是最短路代码如下:/* * A原创 2017-10-06 10:18:24 · 274 阅读 · 0 评论 -
Sightseeing Cows POJ - 3621 环点权与边权和之比最大
大致题意: 给出一个有向图,每个点都有一个点权,每条有向边也都有一个边权,要求出一个环使得环中点权之和与边权之和的比值最大。 思路: 如果将环上的边和点一一绑定,E(u,v)=k(e(u,v))-value[u],这样就变成选取一个合适的k; 考虑k_max是答案,然后发现k >k_max不可能有负环,而k/* * Author : Echo * Email原创 2017-10-06 20:59:32 · 685 阅读 · 0 评论 -
Cow Relays POJ - 3613 邻接矩阵的简单用法
本题的大意就是问从S 到 T 经过边得个数恰为k的最短路是多少。如果学过离散数学 就应该知道 邻接矩阵A A^1里的元素a[i][j] 代表i到j的走一步一条路; A^2里的元素a[i][j] 代表i到j的走两步一条路 ; A^n里的元素a[i][j] 代表i到j的走N步一条路 ; 然后再矩阵快速幂一下就好代码如下/* * Author : Echo * Email原创 2017-10-06 19:11:17 · 280 阅读 · 0 评论 -
插头dp
关于插头dp的一点理解如果是自学的话,有福了,我懵逼了好几天 但可以看看这个PPT 在看看代码应该可以加深理解。练习题一,我写了一点注释,希望有帮助前导算法 状态压缩dp 位运算算法干嘛 求哈密顿回路 条数算法思路 定义了两个东西 (PPT中图文相结合)1.插头:一个格子某个方向的插头存在表示这个格子在这个方向与相邻格子相连.2.轮廓线:已决策格子和未决策格子的分界线我们用状态压缩的原创 2017-07-20 16:31:21 · 357 阅读 · 0 评论 -
状态压缩dp
关于状态压缩dp的一点理解练几道题就明白前导算法 最少掌握二维的dp 进制转换 数论基础算法干嘛 可以求解方案数啊,减少维数,本质还是dp求解算法思路 若果一道dp题,发现确定状态的参数很多,并且他们在某种意义下,是相近的。 这时,可以将其编号,然后用进制的方式压缩到成一个参数,进而减少dp的维数。比如原先空间是dp[100][2][2][2][2][2] 可以变成dp[100][1<原创 2017-07-19 16:49:15 · 417 阅读 · 0 评论 -
区间dp
关于区间dp的理解一直不知道这玩意,研究了一下才发现学长原先讲过(跑 )前导算法 dp算法干嘛: 这种算法可以解决一类问题,这类问题,大区间的最优解,可以由构成它的小区间的最优解组合生成。算法思路: 既然大区间的答案,可以由小区间,组合生成, 那我们就像搭积木一样从小区间,一直求到大区间。 区间越小数目越多,我们需要一一求解所有的区间,因为,每一个区间都有可能是更大区间的基石。 区间合并原创 2017-07-18 20:52:39 · 313 阅读 · 0 评论 -
Light Bulb ZOJ - 3203 一道三分查找的题
题意如下: 有一个高H的灯,在灯的右边D距离有一堵墙,在灯和墙之间有一个高h人,h小于H。问人的影子最多有多长。如下图求L高中物理题,相信学霸可以用公式退出来,不过也会挺费事。我们用三分查找可以轻松求解。首先我们要证明影子随着人向右走,是一个先增后减的单峰函数。 这个是常识 0.0 。大致推理一下,如果没有墙 ,影子是越来越长的,有了墙,使得本该极长的影子,有了上限人的高度。 可能服从单峰函数,当原创 2017-07-18 09:34:25 · 305 阅读 · 0 评论 -
HDU - 1693 Eat the Trees 插头dp
题意 在一张n*m的地图中,1表示有树,0表示没有树(也不能走) DOTA中有一个英雄任务是去吃树(打防御塔)。问,他吃完所有树,并且相同地方不走两次的回路有几条(即哈密顿回路)。思路 求哈夫曼回路,用插头dp 如果不知道插头dp,可以看看这里参考代码#include<cstdio>#include<algorithm>#include<iostream>#include<cstrin原创 2017-07-20 16:07:11 · 226 阅读 · 0 评论 -
石子合并 nyoj737 区间dp
先说一下题意: 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,并将新的一堆石子数记为该次合并的代价。求最小代价。思路 我们假设dp[i][j]是从i到j区间的最优解。 我们想知道,能否像建塔一样,直到了底层的就可以建立高层的。 这里我们以 j-i 的值为dp分层,也就是分为区间长度为1的,2的,3的…n的。 一个问题摆在面前原创 2017-07-18 19:09:05 · 338 阅读 · 0 评论 -
Minimum Cut POJ - 2914 无向图最小割,stoer_wagner算法
无向图最小割,stoer_wagner算法题意: 给一副无向图,求一组最小割集,将图分成两份 题解 某算法刚好可解决 stoer_wagner算法 算法流程: 1.min=MAXINT,固定一个顶点P 2.从点P用类似prim的算法扩展出“最大生成树”,记录最后扩展的顶点和最后扩展的边 3.计算最后扩展到的顶点的切割值(即与此顶点相连的所有边权和),若比min小更新min 4.合原创 2017-10-17 17:55:08 · 276 阅读 · 0 评论 -
Sightseeing POJ - 3463 求最短路和次短路
题意: 给出一个n点m边的有向图,求s到t的最短路和长度为最短路+1的路的种类数; n<=1000,m<=10000; 思路: 1.dijkstra 更新距离时,多加一个坑,放置次短距离. 2.因为多了一个坑,枚举最小值时,多了一倍需要枚举 3.更新距离时,要按照一定的顺序 以免重复更新代码如下/* * Author : Echo * Email : 1原创 2017-10-06 15:36:19 · 320 阅读 · 0 评论 -
Remmarguts' Date POJ - 2449 第k短路 SPFA+A*
这是一道巧妙利用了A*算法的一道题A*算法比较开心的地方是在算出最短路的时候,继续算下去会得到次最短路,继续下去是次次最短路,….所有可能的路.在A*算法中 F(x)=G(x)+H(x) 其中G(x) 表示到x后已经走了的距离 H(x) 表示到x后再到终点估计要走多少(本题可以精确算出用SPFA) F(x) 即是走这条路到达的期望距离一个比较给力的剪枝 每个点访问k次就好了,多余的并没有对答原创 2017-10-05 20:38:00 · 340 阅读 · 0 评论 -
(初识)斜率dp
关于斜率dp的一点理解 我其实应该先学好几何 orz 前导算法 基础dp 单调队列 数形结合思想算法干嘛 是动态规划问题中的一种优化方案, 当满足 时可以利用斜率优化,变化O(n)为O(1)算法思路 本算法是一种数形结合的优化方法, 可以考虑为 随着i增加 i的待考查区间增大。 如果满足上述斜率等式 , 易发现,待考察区间有许多无用值 将之去掉,待考察区间 可能变为斜率递增的单调原创 2017-07-21 19:58:16 · 246 阅读 · 0 评论 -
Desert King POJ - 2728 (最优比率生成树) 二分
题意: 在这么一个图中求一棵生成树,这棵树的单位长度的花费最小是多少? 思路 题目可以写成如下公式:其中E指的是 生成树中的边 R=sigma(a[i]*x[i])/sigma(b[i]*x[i])我们先定义一个函数F(L):=sigma(a[i]*x[i])-L*sigma(b[i]*x[i]),显然这只是对目标式的一个简单的变形。分离参数,得到F(L):=sigma((a[i]-L*b[原创 2017-10-12 20:48:53 · 335 阅读 · 0 评论 -
The Unique MST POJ - 1679 判断最小生成树是否唯一 prim算法
题目大意:给你一个有权值的无向图,判断最小生成树是否唯一。思路 首先,使用prim算法为基础求MST, 其次,在此基础上加入数组dp[i][j],用于记录i到j路径上的权值最大的边。 最后,看没有添加的边是否能替换,如果添加形成环路的第二大边。(也可以求次最小生成树)。代码如下/* * Author : Echo * Email : 1666424499@qq原创 2017-10-10 12:07:04 · 838 阅读 · 0 评论 -
Picnic Planning POJ - 1639 限制顶点度数的MST
题意:有n个兄弟去野餐,目的地为Park。每个人可以选择直接去Park,也可以选择去其他人家,和他一起坐车去Park。每个人家的停车位没有限制,但是Park的停车数不能超过k。问所有人的最短路程。思路 上手可能觉得题目很难,但是分解一下就会发现很简单. ①根节点的度有限制的生成树或许不好写,但度最小的生成树却很简单. ②有一种方法可以 将根节点度为i的最小生成树变成成i+1的MST 方法如下原创 2017-10-09 17:00:24 · 322 阅读 · 0 评论 -
dinic 最大流模板
/* * Author : Echo * Email : 1666424499@qq.com * Description : dinic 算法模板 * Created Time : 2017/8/30 10:05:30 * Last Modify : 2017/9/25 15:55:30 * File Name : C:\Use原创 2017-10-08 15:15:55 · 221 阅读 · 0 评论 -
Full Tank? POJ - 3635 二维最短路(dp?)
题目: n个城市之间有m条双向路。每条路要耗费一定的油量。每个城市的油价是固定并且已经给出的。有q个询问,表示从城市s走到e,油箱的容量为c,求最便宜的方案。 思路: 可以分层图最短路,有点类似DP的思想 按油量分层,dis[i][j]表示到节点i还有j个油的最小花费(不是最短路) 两种决策,加一个油或者直接走 需要比较好的剪枝,不然会超时,可以离线,每次不用更新所有可能的油量,更新比原创 2017-10-07 18:12:17 · 313 阅读 · 0 评论 -
图论题目集
杂题POJ 2449 Remmarguts’ Date(中等) AC 题意:经典问题:K短路 解法:dijkstra+A*(rec),方法很多 该题亦放在搜索推荐题中POJ 3013 - Big Christmas Tree(基础) AC 题意:最简单最短路,但此题要过,需要较好的程序速度和,还要注意精度 解法:DijkstraPOJ 3463 - Sightseeing(中等) AC转载 2017-10-06 16:18:28 · 1180 阅读 · 0 评论