自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 POJ 1860 Currency Exchange spfa

注意,使用spfa算法的时候,一个点进队n+2次说明所有与其相关的点均已经得到了正环的收益,然而除此之外什么都不能说明,在这道题上,也就不可能说明此时某点的值是否可以大于它的初始值。spfa是个神奇的算法,的空一定要好好研究一番。#include<iostream>#include<cstdio>#include<string.h>#include&...

2018-07-30 21:30:16 197

原创 Codeforces 1010C Border 数论

根据一个什么玩意儿没听说过的定理,求的答案居然等价于n=1且众模与m的gcd作为输入的情况。。。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int gcd(int a,int b){ i...

2018-07-30 21:26:47 193

原创 HDU 1394 Minimum Inversion Number 线段树+思维

去年用树状数组做过这道题,今年思路一样,多亏这是个n的全排列,每动一个数,你知道会有多少数发生改变。第五次手写线段树,写过了高兴。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cmath>#include&lt...

2018-07-30 21:23:16 174

原创 HDU 1121 Complete the Sequence 差分

使用差分的方法画一个倒三角,找到规律以后做递推。以前从不晓得差分法,差点就上高斯消元了。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int f[110][110],s,c,t;int main...

2018-07-30 21:20:56 278

原创 HDU 1114 Piggy-Bank 背包dp

纪念dp黑洞水题开窍#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int e,f,t,n,dp[10010],w[510],v[510];int main(){ scanf("%d",...

2018-07-30 21:18:25 118

原创 Gym 101655B Bones’s Battery floyed+二分

先跑一遍floyed,求出两两点对之间的最小距离。然后这个最小距离就相当于一个最新的地图了,新地图里,小于当前二分枚举值,就充1次电,大于这个值,就冲无穷大次电,起点终点相等,就充0次电。再跑一次floyed,看看当前二分枚举的容量符不符合条件。#include<iostream>#include<cstdio>#include<string.h>#...

2018-07-30 21:16:34 192

原创 HDU 1598 find the most comfortable road 并查集+贪心

对边做一个排序,然后对于每一个询问,每次都去枚举权值最小的边,再做最小生成树,一旦询问中的点联通了,我们就可以认为在当前最小边权值的情况下,舒适度最大的情况已经达到了。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cm...

2018-07-29 16:54:49 145

原创 HDU 1350 Taxi Cab Scheme 最小路径覆盖

最小不相交路径覆盖了解一下:每一条路径经过的顶点各不相同。最小路径覆盖=原图的结点数-新图的最大匹配数。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cmath>using namespace std;in...

2018-07-29 16:51:17 123

原创 Codeforces 980E The Number Games 树上倍增

2的指数,前n-1个数的和不如第n个数大。所以我们要把n-k个最大的数保留下来。做法就是贪心排个序,每次找一下还能路径上经过的点数不超过还能放在集合里点数的最大的点。咋找路径呀,那就用树上倍增。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#...

2018-07-29 16:48:46 169

原创 HDU 1281 棋盘游戏 二分图匹配

翻了翻网页,看见有找最大匹配关键点的,然而也不懂。这个题,枚举每个点,然后删了它,如果最大匹配数变小了,那它就是最大匹配必须的点无疑了。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int n,m,...

2018-07-29 16:43:02 127

原创 HDU 1529 Cashier Employment 差分约束+二分

我是这么做错的,统计了每个区间里可以开始干活的人,以及每个小时里需要的人,然后从0到24建了一堆边。这么一来,一旦一天过去第二天开始,本来应该由用一个人完成的工作就会算成两个人。就算是把能够循环的一天展开成两天,这个问题还是有。所以应该采取正确的做法,用不等式表达是这样的:s[ l ] - s[ l - 1 ] >= 0 ( 0 <= l <= 23 )s[ l ] ...

2018-07-29 16:39:37 145

原创 HDU 1264 Counting Squares 线段树+扫描线

第四次写线段树,把之前那道覆盖一次以上面积的题改了改拿过来。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;struct Node{ int l,r; int c; int ...

2018-07-28 21:27:32 129

原创 Codeforces 980D Perfect Groups 思维+数学

有两个很神奇的地方,第一个就是,再给每一个数找到他对应的类别的时候,如果老老实实地进行分解质因数就会超时,但如果每次除的时候都除完全平方数,效率就会顿时大增,不再超时。第二个地方就是,要注意0,单个的0要划分为独自个儿一类,但是有别的数在它旁边,他就应该划到别的数地类别里去。而且,连续n个零,它们能独自产生n(n+1)/2个集合。#include<iostream>#inc...

2018-07-28 21:25:00 173

原创 Codeforces 979E Kuro and Topological Parity dp+组合数

真是差一点点就整出来转移方程了,这个方程也不咋难想的呀。假设每一次都把新的点加在了旧点后面。为什么是加在后面,不是多算加在前面,也不算加在中间?其实算加在前面也无妨,只是一定只能算成加载某一固定位置,因为这三种加法出来的状态数互相重叠的,单算一种则不会。这一第一个阻碍我想出转移方程的地方。然后就按部就班了,各个状态分4维,又偶数个链的白点,偶数个链的黑点,奇数个链的白点,奇数个链的黑点。单个点...

2018-07-25 21:31:48 186

原创 HDU 1247 Hat’s Words 字典树

题目没告诉字符串的长度,一开始开了个vector,一边再字典树上找单词,一边记录可能是两个单词拼接处的位置,结果竟然爆了空间,想不明白,明明每次都把vector清空了呀,倘若空间爆了炸,时间更应该爆炸才对,结果最后发现人家都枚举的字符串拼接的位置,然后我就去学了他们的榜样,可还是wa的。最后让我弄明白了,原来是要再输入的时候要写while (gets(ss[cnt]),strcmp(ss[cnt]...

2018-07-25 21:22:10 118

原创 HDU 1255 覆盖的面积 扫描线+线段树

在这道题之前做过一次扫描线,这次首先就往扫描线上想了。最开始的想法非常傻,就是记录当前坐标长度范围内被覆盖的层数,以及最近一次被覆盖层数由1变成2的位置。每次覆盖的层数要减一了,就去查询,更新什么的。啊呀,太傻了!写着写着就写不下去了,本想把这一发代码贴出来教大家看了笑一笑,结果又弄丢了。其实我们应该这样,对于每一个线段树上的区间,我们去记录他的纵坐标范围,平行线的序号范围,覆盖两次以上的长度...

2018-07-25 21:17:51 156

原创 HDU 1080 Human Gene Functions 基础dp

dp黑洞再次凭一己之力写对了一道dp水题,这个题很简单,跟最长公共子序列一样。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cmath>using namespace std;int t,f[105][10...

2018-07-25 20:48:30 147

原创 HDU 1078 FatMouse and Cheese 记忆化搜索

这题想起来挺容易,虽然我这个dp黑洞自己写的代码还是wa了。我写的是这样的,从乳酪少到乳酪多枚举每个坐标,然后从当前状态走k步以内,去更新乳酪多的点。想想好像也没什么毛病,时间复杂度也不超,但还是wa了。最后使的是记忆化搜索,f[i][j]代表从(i,j)出发能得到的最大收益。#include<iostream>#include<cstdio>#include&l...

2018-07-25 20:46:03 143

原创 HDU 1385 Minimum Transport Cost 最短路+字符串处理

之前做了一道题,也是要求输出路径是字典树最小的,我记得是个状压dp吧。今天看见题目里也让输出字典树最小的路径,顿时魔怔了,心里坚信这也能通过枚举顺序的控制来自动实现,于是就wa了。其实想想也是,状压dp的时候,用于产生后面状态的现有状态,字典序已经是最小的了,再通过枚举下一个字典序最小的符合要求的点,那当然很正确啰,但是用在最短路上就不行。应该就把路径写成字符串,再写个递归去比较字符串。vo...

2018-07-25 20:41:24 149

原创 HDU 1150 Machine Schedule 最小点覆盖

想一想最小点覆盖时的那种性质,很容易就会产生要把能生产一种产品的机器连线的想法。我今天看这个题,又像以前一样,看着看着就自动把题意给忘了然后自己进行了脑补,误以为一个产品能用一台机器的一种以上模式生产,结果不能建图,以后一定引以为戒!另一个神奇之处就是mod_0这个事。显然,能用mod_0及解决的产品根本就不用参与匹配。一开始想在一开始对产品进行处理,但其实这很傻,聪明的做法是进行匈牙利算法的...

2018-07-25 20:35:55 123

原创 Codeforces 979D Kuro and GCD and XOR and SUM 字典树+位运算+思维

第二次做到这种带异或的题要建字典树的,第一次不会,第二次又没想出来,这笔帐先记下了。。。异或这个东西就是,题目让你求的东西,往往跟它每一位密切相关,跟别的关系不大,所以它才总被用来建字典树。。。这个题的第二种操作,有三个条件,一个是整除的条件,对于这个条件,我们用数学的东西一想,就晓得如果不马上需要输出-1的话,那一定是要查一个能整除k的点。但整除跟异或关系又不大,这咋整呢?然后神奇操作就来了...

2018-07-23 10:54:10 147

原创 HDU 1156 Brownie Points II 思维+线段树+离散化

这个题的线段树倒还没有特别难,只是想到如何去用这个线段树比较麻烦。这里我们动态地想象这整个过程,当竖线在最左边时,对于某个横线,大于线的纵坐标,就是第一象限,就是st的得分;小于这个纵坐标,就是第四象限,就是ol的得分。我们把每个点的这两个值都用线段树记下来。然后,处理这个竖线上的点。当我们把竖线朝右移的时候,一个原竖线上的点,对于高于它的点,将变成第三象限的点,我们更新记录高于它的点的st的得分...

2018-07-23 00:11:03 234

原创 Codeforces 1009 E Intercity Travelling 思维+期望

按官方题解的说法,第i公里的难度,是diffi=a12+a222+⋯+ai−12i−1+ai2i−1diffi=a12+a222+⋯+ai−12i−1+ai2i−1。 这么一来,我们可以得到这样的关系: diff1=a1diff1=a1, diffi+1=diffi−ai2i+ai+12i。真棒棒!这样我们就可以顺利的写出这道题了!#include<iostream>#incl...

2018-07-22 21:51:32 183

原创 HDU 1024 Max Sum Plus Plus 基础dp

一开始是这么想的,对于每一个区间,取到一个数的时候,要么就取这个数,要么就不取这个数,取到取不到,结合前面那个点是取到还是没取到的状态,可以写出一个弱智的转移方程来。然后,我就因为无法充分地降维放弃了这个想法。其实大佬们是这样做这个题的,每一个数,作为当前区间当前点被选中时,可以作为当前这个新区间的起点,也可以不作为当前这个新区间的起点。这样写出来的转移方程,可以把数组降一维防止炸空间,还可以开一...

2018-07-22 21:45:39 158

原创 HDU 1829 A Bug's Life 带权并查集

之前也写过两次带权并查集,但是并没有理解新开那个记录权值的数组的意义,不知怎么当时都歪打正着把题给(凭人品)做出来了。今天又按照以前错误的想法去做带权并查集,果不其然一下子就做错了。于是虚心学习,了解到新开的那个数组是用来记录当前节点和祖先结点的关系的。于是更新了一下合并和路径压缩用的公式,把题交上了。#include<iostream>#include<cstdio&g...

2018-07-22 21:27:54 176

原创 HDU 2473Junk-Mail Filter 并查集

一开始我犯的错误是这样的:删除节点的父亲设成一个没用过的新节点。这种做法非常之错误,因为一旦进行路径压缩,煞费苦心申请的新节点就全完了。我们一想,为啥删除并查集里的节点这么难呢?都是因为有很多祖先节点呀!所以我们一开始就不把祖先结点设成实实在在的结点,这样就干啥都方便了。#include<iostream>#include<cstdio>#include<s...

2018-07-22 21:22:58 177

原创 HDU 1317 XYZZY SPFA

这题一举刷新了我对SPFA的认知,不同的入队次数有不同的意义,我小叮当先记下了。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<queue>using namespace std;int dist[105],...

2018-07-22 21:18:44 134

原创 HDU 1069 Monkey and Banana 基础dp

真么气死我了。。。想了两个小时,想出了正确的解法,结果大脑疲劳挂机,突然以为每种箱子只有一个,然后一念之差又去查题解了,也真不辱没我dp黑洞的名号。。。一个箱子翻来覆去也只有六种摆法,一种箱子顶多也就以六种一下的摆法摆放小于六次,所以干脆把一个箱子拆成6个长宽高固定的物品,做一个最长上升子序列,就非常o文明k。#include<iostream>#include<cs...

2018-07-22 21:14:55 126

原创 HDU 1074 Doing Homework 状压dp

状态数不多,做到每一个作业所用的罚时和前面已经做了哪些作业密切相关,还有其他一些性质都和状压dp非常契合,那么就是他了。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<map>#include<string...

2018-07-22 21:05:29 142

原创 HDU 3038 How Many Answers Are Wrong 带权并查集

最近一连做了好几道就着区间建图的图论题,发现建图的时候都很喜欢把区间看成两个前缀和之差,我小叮当长见识了。这道题也是这样。一开始的时候想让r数组表示当前点到其祖先这个区间(包含两端点),后来要路径压缩了,发现情况不大对头。。。前缀和大法好!果然应该记录当前点与祖先的前缀和之差!#include<iostream>#include<cstdio>#include&l...

2018-07-22 21:01:44 77

原创 HDU 3047 Zjnu Stadium 带权并查集

众所周知,我们做这种种类并查集,喜欢开一个数组,用向量的思想去记录和计算当前点和它祖先的关系。这个题也一样,按部就班把式子写上就行了,建图也很容易想。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;i...

2018-07-22 20:50:36 136

原创 HDU 1384 Intervals 差分约束

是这样的,差分约束的建图方法就不必细说了,建图的时候,要把每个点看成是在某个区间里取了多少点:比如,d[i]就表示从1到i有多少个点被取到了。这样,对于一个区间[i,j]和c,我们有d[j]-d[i]>=c。这样就很好建图了,然后还有一点,0<=d[i]-d[i-1]<=1,这是隐含的条件,忽略了很要命的。最后,套上一个spfa跑一跑。经典差分约束喜欢加一个源点好让图联通,但...

2018-07-22 20:45:50 124

原创 HDU 1059 dividing 多重背包

多重背包模板题。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cmath>using namespace std;int sum,f[200005],a[10];void zerone(int cost...

2018-07-19 23:46:19 151

原创 HDU 1058 Humble Numbers DP

这是一个简单的DP,但我一上来写了个错误的枚举,哎,把傻子贴出来示众啦。。。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<string>using namespace std;int n;long lon...

2018-07-19 23:44:21 121

原创 HDU 1224 Free DIY Tour DAG最长路

DAG最长路可以用动态规划或者spfa的方法求。逛了一圈论坛,看见有人说dijkstra也可以,但我自己写了个dijkstra却WA了,还是太菜了呀。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<stack>u...

2018-07-19 23:42:03 142

原创 HDU 1811 Rank of Tetris 并查集+拓扑排序

我这号菜鸡,上来又用一个蠢萌的算法WA掉了这道题,就是把相同级别的点,也按照编号的大小做一个拓扑排序。其实这用手指头肚想想都不可能对,一定会把原本conflict的情况算成ok的。所以转而使用正常人会用的方法,使用并查集把相等级别的点合成一个点,这样很好。#include<iostream>#include<cstdio>#include<string.h&...

2018-07-19 23:39:13 134

原创 HDU 1045 Fire Net 二分图匹配

机智建图法。行为一个集合里的点,不能互相攻击的行算两个;列为另一个集合里的点。这样做一个二分图匹配,一个行就不能跟多个列匹配,避免出现互相攻击的状况,相当于做了一次缩点。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespa...

2018-07-19 23:35:19 115

原创 HDU 1217 Arbitrage 最短路

floyed算法的变形。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<queue>#include<map>#include<string>using namespace std;

2018-07-19 23:32:14 107

原创 CodeForces 1009F Dominant Indices 树上dsu

老厉害了,借这道题学习一下树上启发式合并。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<vector>#include<map>using namespace std;int n,sz[100...

2018-07-19 23:30:11 284

原创 HDU 1011 Starship Troopers 树形dp

You, the leader of Starship Troopers, are sent to destroy a base of the bugs. The base is built underground. It is actually a huge cavern, which consists of many rooms connected with tunnels. Each roo...

2018-07-17 21:30:51 155

空空如也

空空如也

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

TA关注的人

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