pfeiKing
安安静静地先稳住
展开
-
稳定婚姻算法 配题(HDU 1522)
稳定婚姻问题:N男和N女的匹配问题,两两配对。 很多BLOG以及稳定婚姻算法的设定都是男生追女生,此处全部改掉。 每一个女生对所有的男生有一个排序,这个女生会最先去追排在第一位的男生,如果这个男的把这个女的拒绝了,那么这个女的就回去选在排在第二位的男生,如果这个男生还把她给拒绝了,那就依次类推。 每一个男生对所有的女生有一个评分(每个男人对每个女生的评分不一样,因人而异),一个男生希望评...原创 2019-12-07 10:51:31 · 511 阅读 · 0 评论 -
有源汇有上下界最大流/最小流 配题(HDU 3157)
给出解决有源汇有上下界最大流/最小流问题的具体建图步骤,以及算法步骤,并配有例题,以及代码。原创 2019-12-04 15:26:22 · 377 阅读 · 0 评论 -
无源汇有上下界可行流 配题(HDU 4940)
无源汇上下界可行流:每一个边的流量有上界下界限制: 每一个点的所有汇入流量等于该点的所有流出流量提问:是否存在网路流量满足上述的条件?解决方案:构建超级源点 source 超级汇点 sink 计算,其中 u 表示指向点 id 的所有点,v 表示从点 id出发的所有点 如果,不做任何操作 如果,从source指向该点连接一条权重为的边 如果,从该点指向sink连接一条权重...原创 2019-11-30 11:05:45 · 302 阅读 · 0 评论 -
最小费用最大流MCMF 配题(HDU 6611)
最小费用最大流、最大费用最大流都是一样的。其要求就是在最大流的基础上费用的最值解决方案,寻找增广路的时候通过SPFA算法进行增广,如果要返回所需要的费用,就是在增广之后返回需要的权值即可。配题:HDU 6611题意:寻求 k 个子上升子序列(不重复),然后返回点权之和,使其最大。思路:上升序列的问题可以通过MCMF来完成,建图思路如下:定义超级源点source,第二个超级远...原创 2019-11-22 10:21:35 · 432 阅读 · 0 评论 -
2-SAT团问题 配题(POJ 3648)
2-SAT团问题:给出 n 个布尔变量(取值0 或 1),之后再给出 m 个有关这些变量的约束条件,设其中有i,j两个变量必须选择 i 必须不选 i i 和 j 中选择一个 i 和 j 不都选择 i 和 j 选择的情况相同 i 和 j 选择的情况相反问:能否将这 n 个布尔变量分成两个组分,并且满足给定的这 m 个约束条件。解决方案:1. 建图假设 i 的对立面是必...原创 2019-11-12 21:50:12 · 286 阅读 · 0 评论 -
次小生成树 配题(HDU 4081)
次小生成树:在最小生成树(MST)的基础上求得。算法步骤:基础:求出最小生成树,并且标记最小生成树的所有边 将一个不是最小生成树的边加入到最小生成树中,此时有 N 条边( N 个点),必定存在一个“环”,现在需要去除“环”上一条边使之成为一课生成树。 在“环”中去除的边为除了加入边以外的权值最大的边(因为除了次小,就是最小)。 枚举不在最小生成树上的每一条边,将其进行2、3步操作,然...原创 2019-11-08 20:46:20 · 224 阅读 · 0 评论 -
K短路 反向Spfa正向A* 配题(HDU 6181)
K短路:最短路是1短路,次短路是2短路,以此类推得到K短路。算法流程:反向建图,从终点求解一次单源最短路。 正向建图,从起点开始进行A*搜索,其中启发式函数为,其中 f 表示分数,g 表示走到该点用到的最短路程,h 表示还需要走最少 h 路程才能到达终点。 那么在A*搜索的过程中第K此到达终点的路就是K短路。配题:HDU 6181题意:无向图中求次短路,也就是 2短路问题。...原创 2019-11-01 15:32:40 · 189 阅读 · 0 评论 -
线段树 区间合并解决动态LCIS问题 配题(HDU 3308)
动态LCIS问题:动态的最长连续上升子序列。如果该序列是静态的,那么既可用线段树的区间合并操作来求解LCIS,又可以使用动态规划方式来求解。 如果该序列是动态的,不断地要更新序列的权重并且进行及时的LCIS求解,此时如果依旧使用DP方式,难免过于耗时,因为动态规划方式,是进行预处理,之后缩短查询的时间,但是一旦序列是动态之后,需要不断地预处理,非常耗时。故使用线段树的区间合并操作来解决动态L...原创 2019-10-31 15:35:17 · 926 阅读 · 0 评论 -
线段树 区间更新区间查询 配题 (HDU 4902)
区间更新,可以采用遍历点更新的方式,但是时间复杂度很高,故此引用了lazy,延迟思想:如果一个线段树的划分区间属于更新区间,可以先将所有的操作“累加”在该区间,不需要在继续向下更新。 如果一个线段树的划分区间属于更新区间并且区间内的数值是一致的,那么可以先将操使用于该区间,而不需要继续向下更新,因为该区间内的所有数值是一致的。引入两个函数:Push_down函数:当前的线段树划分区间不...原创 2019-10-30 10:50:38 · 254 阅读 · 0 评论 -
线段树 点更新区间查询 配题(HDU 5172)
使用线段树对连续数据进行查询。查询的时间复杂度为。思想:对一个区间进行维护,父亲区间的信息,是左右子区间的信息综合。当子信息变更的时候需要去,同步更新父亲区间信息。配题:HDU(5172)题意简单:判断一段区间是否为1~b-a+1的全排列:区间内的数字加和为1~b-a+1(等差数列求和) 区间内不能有重复的数字解决方案:第一个问题可以通过预先存储前缀和来解决,的时间就能去判...原创 2019-10-29 16:47:15 · 184 阅读 · 0 评论 -
LCA 离线Tarjan算法 配题(HDU 4547)
LCA 在线算法是将问题转化为序列极值问题,使用动态规划的方式 进行求解,而离线LCA算法,表示在接收到所有查询的情况下,对所有查询同时进行处理。LCA离线Tarjan算法:思想:当一个祖先的一个子树被遍历完成之后进行回溯,并且告诉孩子的祖先是谁(注意顺序,先回溯,再去告诉孩子自己的组向,此处使用并查集进行操作),之后祖先在遍历其它子树的时候,如果在被访问过的节点中有和当前节点是查询的一对...原创 2019-10-24 10:28:30 · 223 阅读 · 0 评论 -
LCA 在线倍增算法 配题(HDU 2585)
LCA:最近公共祖先。算法:在线倍增算法,将问题转化为RMQ问题(序列极值问题)使用ST算法进行求解,ST算法的思想是两两比较,在两两比较的基础上四四比较,在四四比较的基础上八八比较(二进制的思想)。时间复杂度。本来是做的HDU 4547 但是不知道为啥就是AC不了,很难受。所以改为这个题目。(有点莫名其妙)也同时附上4547的代码供一起讨论。配题:HDU 2585题意:n个村庄,...原创 2019-10-23 10:58:09 · 266 阅读 · 0 评论 -
网络流-最大流 Dinic 配题(HDU 3549)
网络流-求解最大流的算法:Dinic算法通过BFS构建层次网络 通过DFS寻找增广路EK算法通过BFS找到一条到达汇点的路径,记录该路径 将该路径的残存流量减去路径上的最小流量配题:HDU 3549题意:构建网络,寻找点 1 到 点 N 的最大流。注意:建图时候偶数边都是正向边,奇数边都是反向边,反之亦然。使用前向星建图,可以很好地提取一条正向边的反向边但是使用vect...原创 2019-10-08 19:40:55 · 240 阅读 · 0 评论 -
差分约束-Spfa 配题 (POJ 1201)
对于上述的不等式问题,将X看成dis,将下标看成点,那么这就是一个典型的最短路问题。建图:,建一条从b指向a的边,最后求最短路 ,建一条从b指向a的边,最后求最长路 ,将其转化为,然后统一到最长路或者最短路格式即可对于差分约束系统存在两种结果:无解,最短(长)路无解 无穷多解,随便给出一个最短(长)路解,即可配题:POJ 1201题意:给n个区间,然后每个区间必须包含...原创 2019-10-07 11:02:42 · 190 阅读 · 0 评论 -
字典树 配题 (HDU 1277)
字典树,通过数据结构的定义,来形成搜索树,方便查找。有两个操作步骤:插入序列 寻找序列配题:HDU 1277这个题目应该是key的长度是小于5的数据。思想:用关键词建立字典树,在每一个序列最后标记其编号,最后遍历整个文章,遇到编号输出即可,重复不需要输出。// HDU 1277 #include<iostream>#include<cstring&...原创 2019-09-26 20:55:25 · 210 阅读 · 0 评论 -
广搜BFS 配题(HDU 1180)
在当前的状态下搜索所有可能的状态,1)队列内的顺序问题;2)搜索时的各种判断问题,边界等等。题目:HDU 1880 (中文题目)思想:典型的广搜问题,注意三点:1)如果下一个地点是梯子,要判断梯子的方向和人的走向是否一致2)因为题目要求到达T的最少时间,所以要用到优先队列来代替传统的队列3)如果下一个点是梯子,但是不能走,那么此时增加了一种搜索方向,那就是原地不动,也要推入队列...原创 2019-09-04 19:15:06 · 186 阅读 · 0 评论 -
拓扑排序 配题(HDU 4857)
给定点的先后出场次序:例如 点 u 出场的前提是点 v 已经出现,那么这就代表了一个约束条件,现在给出很多的约束条件,用程序来给这些点的出场次序排个序,要求满足所有的约束条件问题,这时候用到的就是拓扑排序。拓扑排序用于有向无环图,如果过要是想判断一个有向图是否存在环,可以使用拓扑排序进行判断(如果提取入度为0的点的个数没有达到所有点的个数,那么就一定出现环了)有关拓扑排序的输出问题:...原创 2019-09-05 16:41:27 · 234 阅读 · 0 评论 -
最短路-Floyd 配题(HDU 2066)
Floyd最短路算法属于多源最短路,可以求出图中任意两点的最短路径。如果图中存在负权但是不存在负环的话Floyd是可以解决最短路问题的。Floyd算法返回最短路径:多源最短路,需要二维空间的数组来存储所有的最短路径,path[i][j],其中 i 表示起点,j 表示终点,那么path[i][j]表示以 j 为终点,i 为起点的最短路径上点 i 的下一个节点。那么在初始化过程中path[i][j...原创 2019-09-05 19:33:55 · 385 阅读 · 0 评论 -
最短路-Dijkstra 配题(HDU 3665)
一种单源最短路算法,只能用于边权为正的图中。该算法的思想非常简单,在某一时刻,整个图的点被分为两个部分:第一部分:包含源点,已经知道了这部分中其它点到达源点的最短距离。第二部分:知道了该部分所有的点到达第一部分中的点的最近距离。在该算法中可以使用优先队列进行优化,代替原有的暴力FOR循环。题目:HDU 3665(题意简单)思想:从0点出发,求出到达所有海边城市的最短路,然后...原创 2019-09-06 14:17:05 · 195 阅读 · 0 评论 -
最短路-Spfa 配题(HDU 3790)
Spfa最短路算法,属于单源最短路,可以存在负权边,可以判断负环。Spfa的算法思想从源点层层松弛,达到全图的单源最短。题目:HDU 3790(题意很简单)注意:输入边的信息的时候,用scanf,别用cin,会超时。#include<iostream>#include<cstring>#include<vector>#include<...原创 2019-09-07 10:17:57 · 312 阅读 · 0 评论 -
最小生成树-Kruskal 配题(HDU 1863)
无向图,最小生成树,Kruskal算法需要使用到并查集。配题:HDU 1863(中问题,简单)思想:如何判断是否形成了一个最小生成树,第一种方法就是计算被合并的边的次数,是否达到了最小生成树的边数,第二种方法就是,查询所有的点是否是只有一个祖先,如果是只有一个祖先,表明成功,如果祖先数量大于一个的话,表示条件不充足。#include<iostream>#include&...原创 2019-09-07 19:13:55 · 208 阅读 · 0 评论 -
最小生成树-Prim 配题(HDU 1863)
最小生成树的Prim算法的思想和Dijkstra的算法思想是一致的,但是唯一的不同点在于,Dijkstra算法更新的是非选集合以外的点到达源点的最短路径,而Prim算法更新的是非选集合到选定集合的边的一条最短的权重边。题目:HDU 1863(和克鲁斯卡尔算法的题目一致)#include<iostream>#include<cstring>#include<...原创 2019-09-08 16:23:52 · 255 阅读 · 0 评论 -
最小树形图-朱刘算法 配题(Codeforces Road Repairs)
最小树形图就是一张有向图的最小生成树,可能存在也可能不存在。树形图的定义是从一个点出发可以到达任何一个点,并且除了源点的所有点的入度都为1,那么最小树形图就是所得到的所有树形图中权重总和最小的树形图,叫作最小树形图。最小树形图的算法本文采用朱刘算法:寻找当前图的最短弧 判断是否为树形图 判断并且标记有向环 将有向环进行收缩形成一个新的点,更新所有指向这个有向环中任何点的边权 上述步...原创 2019-09-18 09:56:01 · 374 阅读 · 0 评论 -
强连通-Tarjan算法 配题(HDU 1269)
点于点之间的强连通(u,v):同时存在 u 至 v 的路径,以及 v 至 u 的路径,那么表示u、v两点是强连通。强连通图:如果一个图中的任意两点都是强连通,那么该图就是强连通图。解决该问题的算法:Tarjan算法说明:dfn[u]:深搜过程中点 u 的次序号 low[u]:以 u 为根节点,其能搜索到的最小的次序号配题:HDU 1269(中文题)思想:通过给强连通分量进行...原创 2019-09-18 15:28:09 · 233 阅读 · 0 评论 -
二分匹配-匈牙利算法 配题(HDU 2444)
二分图匹配:可以通过网络流来求取最大匹配数,也可以通过匈牙利算法求解。匈牙利算法:其思想就是,先给一个点分配一个配有,然后当无法给后面的新点分配配偶的时候,会问问其想配对的配偶的已经配好的配偶能不能去找其他配偶。最大匹配的一些性质:二分图的最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联。最大匹配数 = 最小点覆盖数(Konig定理) 二分图的最大独立集:在图中选取最多的点,...原创 2019-09-19 08:37:42 · 255 阅读 · 0 评论 -
树状数组-FenwickTree 配题(HDU 6447)
树状数组:点更新,区间查询特点:一个点的父亲,是其本身加上其最低位 一个点的孩子(并不是有连接的孩子,而是该点的左侧区间),是其本身减去其最低位题目:HDU 6447题意:一个矩阵,左上角起点坐标(0, 0),右下角终点坐标(,),每次走一步,方向是下,右,右下,有的坐标上有权重,是可以得到的,但是得到该点权重的要求是,必须从左上角,通过方向右下,走过来的点才能够吃到这个坐标上的权...原创 2019-09-20 09:43:54 · 281 阅读 · 0 评论 -
深搜DFS 配题(POJ 1190)
定义出口,通过各个变量之间的约束关系进行剪枝,通过枚举搜索“方向”将递归进行下去。题目:POJ 1190(中文题目,这看到不懂就尴尬了,题目中的pi是没有什么用处的,全给你约掉了在公式里面)思路:枚举的对象就是每一块蛋糕的半径和高度,在题目中半径和高度有天然的限制,然后 M 层的蛋糕加起来体积恰好为 N 。要求面积最小的 M 层蛋糕。可以计算出m层蛋糕,最小体积和最小上下底面积:v[2...原创 2019-09-02 16:30:18 · 361 阅读 · 0 评论