05 2018 档案

摘要:注意这道题是双向边, 然后直接套模板就ok了。#include#include#include#include#include#define REP(i, a, b) for(int i = (a); i edges;vector g[MAXN];int h[MAX... 阅读全文
posted @ 2018-05-29 18:57 Sugewud 阅读(107) 评论(0) 推荐(0) 编辑
摘要:这道题只是在边上做一些文章。这道题起点终点可以看成半径为0的洞, 我是直接加入了洞的数组。边就是两点间的距离减去半径, 如果结果小于0的话, 距离就为0, 距离不能为负然后我看到n只有100, 范围很小, 虽然这道题只是单源最短路,但是Floyd代码比较短, 而又不会... 阅读全文
posted @ 2018-05-29 18:28 Sugewud 阅读(87) 评论(0) 推荐(0) 编辑
摘要:水题, Floyd一遍就完了。#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 101;int d[MAXN]... 阅读全文
posted @ 2018-05-29 17:54 Sugewud 阅读(87) 评论(0) 推荐(0) 编辑
摘要:这道题主要比较权值的时候要改变一下,其他地方基本一样。比较权值的时候要考虑边的时间与a, b可以设相对于当前边的时间now, 则now = d[u] % (a+b), 也就是当前这个边进行到整个a和b的循环的哪个地方了。然后我们分类讨论。(1)当t >a的时候, 这种... 阅读全文
posted @ 2018-05-28 18:56 Sugewud 阅读(137) 评论(0) 推荐(0) 编辑
摘要:二分图网络流做法(1)最大基数匹配。源点到每一个X节点连一条容量为1的弧, 每一个Y节点连一条容量为1的弧, 然后每条有向边连一条弧, 容量为1, 然后跑一遍最大流即可, 最大流即是最大匹配对数(2)最小(大)权完美匹配(每个点都被匹配到)。和最大基数匹配类似, 只是... 阅读全文
posted @ 2018-05-27 15:19 Sugewud 阅读(217) 评论(0) 推荐(0) 编辑
摘要:#include#include#include#include#include #define REP(i, a, b) for(int i = (a); i edges;vector g[MAXN];int p[MAXN], a[MAXN], d[MAXN], ... 阅读全文
posted @ 2018-05-27 14:21 Sugewud 阅读(97) 评论(0) 推荐(0) 编辑
摘要:这道题要求每个节点只能经过一次,也就是结点容量为1, 要拆点, 拆成两个点, 中间连一条弧容量为1, 费用为0.因为拆成两个点, 所以要经过原图中的这个节点就要经过拆成的这两个点, 又因为这两个点的边的容量为1, 所以只能经过一次, 就等价于原图中的点只能经过一次。拆... 阅读全文
posted @ 2018-05-27 12:16 Sugewud 阅读(120) 评论(0) 推荐(0) 编辑
摘要:这道题的建模真的非常的秀, 非常牛逼。先讲建模过程。源点到每一行连一条弧, 容量为这一行的和减去列数, 然后每一列到汇点连一条弧, 容量为这一列的和减去行数, 然后每一行和列之间连一条弧, 容量为19。然后求最大流, 最后矩阵中每一个元素的值就是其所在列和行所连的弧的... 阅读全文
posted @ 2018-05-27 10:39 Sugewud 阅读(203) 评论(0) 推荐(0) 编辑
摘要:设一个源点, 到所有设备连一条弧, 容量为1, 然后设一个汇点, 所有插座到汇点连弧, 容量为1, 然后转换器也连一条弧, 容量为1。 最后最大流就是答案。其中注意节点数要开大一些。#include#include#include#include#include#in... 阅读全文
posted @ 2018-05-26 20:07 Sugewud 阅读(122) 评论(0) 推荐(0) 编辑
摘要:二分分为二分查找和二分答案。 二分查找。实际上就是一个有序数列中有一个解,然后搜一遍求这个解。而直接for循环暴搜一遍的话时间复杂度是O(n),而用二分查找可以降低时间复杂度,为O(logn);而数组形象化出来的话就是0000010000000(0为无解,1为有解)... 阅读全文
posted @ 2018-05-26 15:16 Sugewud 阅读(125) 评论(0) 推荐(0) 编辑
摘要:EK算法 #include#include#include#include#include#define REP(i, a, b) for(int i = (a); i edges;vector g[MAXN];int p[MAXN], a[MAXN], n, m... 阅读全文
posted @ 2018-05-26 11:41 Sugewud 阅读(173) 评论(0) 推荐(0) 编辑
摘要:这道题用到了很多知识点, 是一道好题目。 第一用了状态压缩, 因为这里最多只有20位, 所以可以用二进制来储存状态 (要对数据范围敏感), 然后涉及到了一些位运算。 第二这里是隐式图搜索, 和之前有一道bfs倒水的有点像, 就是题目和图论没有半毛钱关系,... 阅读全文
posted @ 2018-05-25 21:32 Sugewud 阅读(168) 评论(0) 推荐(0) 编辑
摘要:这道题是Floyd的变形改成d[i][j] = min(d[i][j], max(d[i][k], d[k][j]))就好了。#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)usin... 阅读全文
posted @ 2018-05-25 19:33 Sugewud 阅读(133) 评论(0) 推荐(0) 编辑
摘要:Floyd联通, 然后为了输出联通分量而新建一个图, 让互相可以打电话的建立一条边, 然后dfs输出联通分量就ok了。#include#include#include#include#include#include#define REP(i, a, b) for(in... 阅读全文
posted @ 2018-05-24 18:55 Sugewud 阅读(129) 评论(0) 推荐(0) 编辑
摘要:(1)无负权边单源最短路 堆优化dijkstra#include#include#include#define REP(i, a, b) for(int i = (a); i rhs.w; //注意这里是大于,因为要小跟堆 } }; vector g[MAXN];... 阅读全文
posted @ 2018-05-24 16:57 Sugewud 阅读(108) 评论(0) 推荐(0) 编辑
摘要:标题指的边集是说这道题的套餐, 是由几条边构成的。思路是先做一遍最小生成树排除边, 因为如果第一次做没有加入的边, 到后来新加入了很多权值为0的边,这些边肯定排在最前面,然后这条边的前面的那些边肯定都要再扫一遍, 也就是这条边无论如何都不会选。那么后来就是二进制枚举套... 阅读全文
posted @ 2018-05-22 18:34 Sugewud 阅读(95) 评论(0) 推荐(0) 编辑
摘要:思路:枚举所有可能的情况。枚举最小边, 然后不断加边, 直到联通后, 这个时候有一个生成树。这个时候,在目前这个最小边的情况可以不往后枚举了,可以直接更新答案后break。 因为题目求最大边减最小边最小, 在最小边确定的情况下, 要使得差值最小, 就要使得最大边最小,... 阅读全文
posted @ 2018-05-21 18:48 Sugewud 阅读(99) 评论(0) 推荐(0) 编辑
摘要:这道题看了刘汝佳的代码真的是天秀, 很值得学习。具体看代码#include#include#include#include#define REP(i, a, b) for(int i = (a); i g;int done[MAXN], kase, cnt, k;s... 阅读全文
posted @ 2018-05-20 11:53 Sugewud 阅读(135) 评论(0) 推荐(0) 编辑
摘要:看了这篇博客https://blog.csdn.net/u013520118/article/details/48032599但是这篇里面没有写结论的证明, 我来证明一下。首先结论是对于E图而言,如果存在i和j结点到k1都有边,而i和j中只有一个结点到k2有边,则这个... 阅读全文
posted @ 2018-05-19 12:28 Sugewud 阅读(205) 评论(0) 推荐(0) 编辑
摘要:又是一道非常复杂的构造法……#include#include#define REP(i, a, b) for(int i = (a); i LHi; i--) //从最高隔板到边缘的时间 lt += h, h = max(h, LHs[i-1]); for(in... 阅读全文
posted @ 2018-05-19 10:58 Sugewud 阅读(339) 评论(0) 推荐(0) 编辑
摘要:这道题我是从样例中看出思路了2 40 0 1 1看这组数据, 输出的是No, 为什么呢?因为两个1之间没有神龙喝水, 所以一定会有水灾。然后就启发了我,两次同一个湖的降水之间必须至少有一次神龙喝水, 否则就会有水灾。如果是第一个湖的话那么就看作在第0次有一次降水。所以... 阅读全文
posted @ 2018-05-18 22:24 Sugewud 阅读(141) 评论(0) 推荐(0) 编辑
摘要:这道题的构造法真的复杂……要推一堆公式……这道题写了几天了……还是没写出来……一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA。然后换了个思路, 觉得是贪心, 觉得只要保证当前留下的最多就ok了, 然后又WA。这里不能每一步贪心, ... 阅读全文
posted @ 2018-05-17 18:51 Sugewud 阅读(224) 评论(0) 推荐(1) 编辑
摘要:知道是构造法但是想了挺久没有什么思路。然后去找博客竟然只有一篇!!https://blog.csdn.net/no_name233/article/details/51909300然后博客里面又说貌似UVa数据有问题过不了, 而他的代码我也懂, 就没有自己写一遍了。但... 阅读全文
posted @ 2018-05-14 18:22 Sugewud 阅读(266) 评论(0) 推荐(0) 编辑
摘要:这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候无解, 否则有解。但是没有给出证明, 在网上也找到详细的证明……我也不知道是为什么……求逆序对有两种方法, 树状数组和归并排序, 当然这道题数据很小可以直接暴力, 我三种都写了。... 阅读全文
posted @ 2018-05-12 20:08 Sugewud 阅读(179) 评论(0) 推荐(0) 编辑
摘要:这道题参考了https://www.cnblogs.com/20143605--pcx/p/4889518.html这道题就是枚举矩形的宽, 然后从宽再来枚举高。具体是这样的, 先把所有点的高度已经0和最高点储存起来, 排个序。然后就可以枚举所有可能的矩形的宽, 然后... 阅读全文
posted @ 2018-05-12 16:35 Sugewud 阅读(159) 评论(0) 推荐(0) 编辑
摘要:这道题貌似可以用滑动窗口或者单调栈做, 但是我都没有用到。这道题要求连续子序列中和乘上最小值最大, 那么我们就可以求出每一个元素, 以它为最小值的的最大区间的值, 然后取max就ok了。那么怎么求呢?我可以初始化出一个第一个小于当前元素的的元素的位置, 也就是说初始化... 阅读全文
posted @ 2018-05-12 12:56 Sugewud 阅读(181) 评论(0) 推荐(0) 编辑
摘要:这道题说连续子序列, 马上就想到滑动窗口。注意窗口里面的元素中小于等于k的才是有效元素。记录窗口里面有效元素的个数, 满足了之后开始缩短窗口, 如果左端点不是有效元素或者即使窗口中存在这个元素的个数大于1, 即使删去还是满足窗口内有1到k这些元素的时候, 左端点就删去... 阅读全文
posted @ 2018-05-12 10:05 Sugewud 阅读(169) 评论(0) 推荐(0) 编辑
摘要:暴力n的四次方, 然而可以用中途相遇法的思想, 分左边两个数和右边两个数来判断, 最后合起来判断。一边是n平方logn, 合起来是n平方logn(枚举n平方, 二分logn)(1)两种比较方式是相反的, 所以第二次可以直接把数组倒过来做, 代码可以省很多。(2) 我们... 阅读全文
posted @ 2018-05-11 21:31 Sugewud 阅读(391) 评论(0) 推荐(0) 编辑
摘要:先排序, 然后每个线段先放右端点, 然后往下放, 如果不能放就整体往左移动, 当不能往左移动的时候就ans++开始下一个整块。判断能不能向左移动要用一个变量储存每个已经放了的区间中线段与左端点距离的最小值。#include#include#define REP(i, ... 阅读全文
posted @ 2018-05-10 17:13 Sugewud 阅读(140) 评论(0) 推荐(0) 编辑
摘要:参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html(1)直接二分答案。说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解。但是想了很久没想出来, 后来看了博客发现因为显然答案是单调的, 可以用二分来做。看到... 阅读全文
posted @ 2018-05-09 18:56 Sugewud 阅读(171) 评论(0) 推荐(0) 编辑
摘要:我看到数据范围只有500, 第一反应枚举所有的可能,然后求出每种可能的最小次数。但是不知道怎么求最小次数。我想的是尽量让一次交换可以让两个不在应该在的位置的数字到原来应该在的位置的数字, 这样可以消除两个差异, 否则就交换到该到的地方, 消除一个差异。但是怎么实现??... 阅读全文
posted @ 2018-05-09 17:07 Sugewud 阅读(121) 评论(0) 推荐(0) 编辑
摘要:本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是固定的, 是在一个范围内“滑动的”, 只要右端点不超过截止时间就ok。然后我就先考虑有包含关系的时候怎么选, 然后发现当两个区间只能放一个的时候时间更短而截至时间更长的时候,显然... 阅读全文
posted @ 2018-05-08 17:17 Sugewud 阅读(169) 评论(0) 推荐(0) 编辑
摘要:摘自紫书第八章突破口一般是区间包含的时候怎么选, 以及怎么排序(1)选择不相交区间问题: 有n个开区间(ai, bi) 选择尽量多的区间, 使这些区间两两没有公共点。 按照b从小到大排序(这种情况a无所谓, 得出结果一样) 一定选第一个区间, 然后, 把所有和区间1相... 阅读全文
posted @ 2018-05-07 17:06 Sugewud 阅读(226) 评论(0) 推荐(0) 编辑
摘要:这个点就是贪心策略中的区间选点问题。把右端点从大到小排序, 左端点从小到大排序。每次取区间右端点就可以了, 到不能覆盖的时候就ans++, 重新取点ps:这道题不考虑精度也可以过 要着重复习一下区间相关问题了, 包括前面没有例题的知识点的部分#inclu... 阅读全文
posted @ 2018-05-06 17:48 Sugewud 阅读(104) 评论(0) 推荐(0) 编辑
摘要:这道题我苦思冥想了一个小时, 想用背包来揍sum/2, 然后发现数据太大, 空间存不下。然后我最后还是去看了别人的博客, 发现竟然有个神奇的结论……幸好我没再钻研, 感觉这个结论我肯定是想不到的……结论是:在1 #include#define REP(i, a, b... 阅读全文
posted @ 2018-05-06 16:33 Sugewud 阅读(104) 评论(0) 推荐(0) 编辑
摘要:这道题一开始我没想什么直接开始染, 但是是for循环一个节点一个节点染, 然后就WA后了看了https://www.cnblogs.com/jerryRey/p/4702323.html发现原来还需要证明一下染色一定可以, 同时染色的方式是dfs(1)证明首先, 如果... 阅读全文
posted @ 2018-05-06 12:41 Sugewud 阅读(158) 评论(0) 推荐(0) 编辑
摘要:这道题我很快就写出来了, 但是一直WA, 然后发现是精度, 这坑了我一个小时……(1)贪心。每次就尽量分数高, 可以保证最后分数最高(2)神tm精度问题。记住判断大于小于和等于的时候要用EPS(1e-6)a == b fabs(a-b... 阅读全文
posted @ 2018-05-05 19:26 Sugewud 阅读(160) 评论(0) 推荐(0) 编辑
摘要:这道题的意思紫书上是错误的……难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22然后就不管了,先写, 然后就WA了。然后看了https://blog.csdn.net/wcr1996/article/details/43774331发现是题意... 阅读全文
posted @ 2018-05-05 15:07 Sugewud 阅读(148) 评论(0) 推荐(0) 编辑
摘要:这道题和例题8-1相当的像。例题8-1https://blog.csdn.net/qq_34416123/article/details/80112017一开始我还以为用归并的思想, 用交换把局部交换好, 然后再整体交换花了一个一小时好不容易写好之后, 发现我这种解法... 阅读全文
posted @ 2018-05-05 11:39 Sugewud 阅读(177) 评论(0) 推荐(0) 编辑
摘要:参考了https://blog.csdn.net/weizhuwyzc000/article/details/47038989我一开始看了很久, 拿纸折了很久, 还是折不出题目那样。。一脸懵逼后来发现不能按照平时那样折一下然后再旋转90度再折, 应该一直折……后来观察... 阅读全文
posted @ 2018-05-04 22:52 Sugewud 阅读(199) 评论(0) 推荐(0) 编辑
摘要:参考了https://blog.csdn.net/catglory/article/details/47188949最后推出来操作的个数为问号的个数 加上 同一位置上S串为0而T串为1的位置数量 与 同一位置上S串为1而T串为0的位置数量的最大值。也就是max(ans... 阅读全文
posted @ 2018-05-03 12:27 Sugewud 阅读(138) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个数, 要求删去一些数字, 使得剩下的数字最大。这道题用贪心解决。大家想一想, 两个数比较大小, 肯定先比较第一位的数,然后依次比较第二位,以此类推。既然我们要保证最后的数字最大, 那么一定要先保证第一位数的最大, 然后保证第二位数最大,以此类推。所以贪心... 阅读全文
posted @ 2018-05-03 11:25 Sugewud 阅读(168) 评论(0) 推荐(0) 编辑
摘要:这道题我真的想的非常的复杂, 拿草稿纸一直在找规律,推公式, 然后总有一些特殊的情况。然后就WA了N次。无奈之下看了别人的博客, 然后就惊了。直接暴力枚举两个相邻字符串里面的所有可能就可以了……真的是暴力出奇迹!#include#include#include#inc... 阅读全文
posted @ 2018-05-02 16:38 Sugewud 阅读(89) 评论(0) 推荐(0) 编辑
摘要:排序之后, 尽量最小和最大的放在一个背包, 放不下就放最大的。#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN =... 阅读全文
posted @ 2018-05-02 16:33 Sugewud 阅读(115) 评论(0) 推荐(0) 编辑
摘要:首先可以用扫描法处理出一个height数组, 来保存从当前行开始, 每一个格子可以向上延伸的最大长度。这种“延伸”的问题用扫描法, 因为往往这个时候可以利用前一次的结果来更新当前的值然后这道题的关键就是是维护一个单调栈, 栈顶的元素就是当前状态所求的答案。这个单调栈满... 阅读全文
posted @ 2018-05-01 17:06 Sugewud 阅读(234) 评论(0) 推荐(0) 编辑
摘要:从左往右扫描一遍, 得从每个位置往右伸长不会碰到天花板的高度, 右往左一样, 取最小, 然后就是可以放“水”的高度了#include#include#define REP(i, a, b) for(int i = (a); i level) level = p[i]... 阅读全文
posted @ 2018-05-01 15:37 Sugewud 阅读(139) 评论(0) 推荐(0) 编辑
摘要:这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考。这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到。具体思路紫书上讲得非常清楚了, 就不讲了。代码有详细注释#include#includ... 阅读全文
posted @ 2018-05-01 15:08 Sugewud 阅读(145) 评论(0) 推荐(0) 编辑
摘要:题意: 判断所给序列是否满足任意连续子序列中至少有一个出现一次的元素。思路:在整体中找到一个只出现一次的元素, 然后在递归两边。因为两边的序列中有这个数那就满足要求, 所以就看剩下的序列漫步满足要求。 参考了 https://www.cnblogs.com/jerry... 阅读全文
posted @ 2018-05-01 11:52 Sugewud 阅读(88) 评论(0) 推荐(0) 编辑
摘要:这道题就是给你一n长序列, 然后把这个序列按顺序分成很多段, 每段长s(最前面可以小于s, 只有第一段的后半段, 最后面也同样, 只有最后一段的前半段), 然后要求是每一段里面没有重复的数, 问你有几种分法实际上看到连续s个数, 就可以想到滑动窗口, 可以提前初始化所... 阅读全文
posted @ 2018-05-01 10:53 Sugewud 阅读(131) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示