11 2016 档案
摘要:treap改了好长时间,erase写错了。。。 splay
阅读全文
摘要:第一问很好搞。第二问事实上可以这么想。如果一条边的流量还有,那么我们走过去不要钱,否则要钱,于是跑个费用流,就好了 (其实跑k次spfa也可以,我是这么写的)
阅读全文
摘要:首先,我们可以想到从源点向每个有蜥蜴的地方连边,然后拆点,因为我们不能把一个点连向多条边,这样修改边的时候不可以,所以拆个点,就可以了
阅读全文
摘要:费用流,其实是求传输一个容量为k的流的最大费用。主要是建图。原点为0,和1连上一条容量为k,费用为0的边,中间每个点拆成两个1和2,连上一条边,容量为k,费用为c,再连一条容量为比k大,费用为0的边,这样是为了跑完费用之后能继续跑拆完后的点和。然后和其他边连上就可以了。n*n和汇点连上一条容量为k,
阅读全文
摘要:最大流最重要的思想就是反向边,其他的不说了,为什么要有反向边呢? 举个例子,白书上那张图,画一画有奇效。其实每次增广的时候,我们的流到了一个点,然后呢把反向边推回去了,也就是相当于把从那边流过来的流推回去了,为什么这是最优的?你想啊,那个流原来是流向某条边,现在来了一个流,把他替代了,叫这个流回去,
阅读全文
摘要:搜索,据说反着输入有奇效,要用位运算,然后剪不剪枝无所谓,没提速。
阅读全文
摘要:我只会这么多 tarjan:codevs 1332 spfa codevs 2038 lca 1787 二分 跳石头 线段树 1012 快速幂: 高精度 3116
阅读全文
摘要:先bfs,预处理每块的大小,然后想象一个k*k的窗口,不断滑动,记录里面有多少堵墙,有多少个不同的连通块,计算即可
阅读全文
摘要:dp,理论上会t,但是实际跑得很快,因为我们只要找到上一个满足条件的值,肯定是最大的,因为这个能选,肯定就能选了
阅读全文
摘要:这道题很妙啊。其实我们可以发现重要的不是起点和终点,重要的是个数,然后脑洞一下,可以递推。(我什么都没有想出来)假设我们已经知道了前面所有子串的gcd,那么我们可以用现在的a[i]和前面每个数求gcd,这样就把加入这个新元素的串的所有情况都枚举了一遍,因为gcd的数量很少,所以很快。枚举是存在一个新
阅读全文
摘要:这是个bfs 首先建图,先从终点bfs求出每点距离,然后从起点开始,确定初始方向:某点和自己相邻距离比自己小1就是 然后就先贪心和上次一样的方向,如果不能走,就找出一个方向,把自己当前方向改掉,重复过程,直到走到终点
阅读全文
摘要:98分 无能为力了 是个搜索,先开始没动脑筋,直接每种情况都搜,样例都要跑5秒钟,然后看了看题解,看到了一句话:后面可以贪心。 好像是的,那么就贪心吧(因为剩下的东西无非就是几带几,带的越多越好,当然可以贪心了) 然后一直五十几分,下了个数据,发现要逐位枚举顺子,(7 8 9 10 j q) 可以有
阅读全文
摘要:题目的意思是只需要找一个人就可以了,还以为要找所有的人,怎么看也看不懂。 这道题懂的不是很彻底,挖 我们利用一个差分数组(差分数组:我们能在O(1)的时间内修改一段区间的值) 举个例子:来自hzwer 比如一开始数列a是0 0 0 0 0 0 前缀和0 0 0 0 0 0 3到5天需要2的教室 将a
阅读全文
摘要:这道题用到了4个dfs,分别是找出所有家的最小生成树,找出一点距离树的最小距离,找出每个点儿子距离的最大值(不包括父亲,也就是指不包括根节点的子树),用父亲的值来更新自己 因为我们可以知道:如果我们在树上,那么最短的距离就是树的长度的两倍-距自己最远的点的距离,当我们不在树上时,就得先走到树上(这条
阅读全文
摘要:贪心,之前先bfs判断是否联通,然后,反向建图,找一个未选择的点,找与他距离最近的点连边,因为每个点都要被选择,所以一个点离他最近的另一个点肯定也被选择,可以贪心
阅读全文
摘要:抄了抄代码,看了看区间dp 把这个项链切开,复制一次,枚举右端点,枚举区间长度,确定左端点,区间中选中一个分割点 f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1])
阅读全文
摘要:A:hash一下,然后判断是否相等即可 F:二分答案,然后枚举每一秒,注意,贪心时应以结束时间作为标准,否则就会错掉,坑了很长时间
阅读全文
摘要:原先t了很长时间,今天复习了下tarjan,打了一遍,自认为自己的tarjan模板简洁 这道题只有基环树,所以tarjan就可以了
阅读全文
摘要:lca裸题,画画图看看就可以了,找出那个一次公共祖先,求距离
阅读全文
摘要:bfs,折半搜索,因为直接搜大概有(12)^13?因为每个状态都会扩展出m种状态大概是(12)^13,然而可以折半搜索,只搜一半,状态数变成(12)^7可以接受,但是事实上极限数据要跑很长很长时间,据说正解是启发式搜索?没学过
阅读全文
摘要:画个图,很容易发现少兜圈子,就是说这些限制c[i],d[i]可以看做[c[i],d[i]],不让那些区间相交,然后就可以了
阅读全文
摘要:首先我们对两个数组排序,对齐每位,然后记录一个火柴对应的另一个火柴,这时我们得到了一个序列:第i根火柴需要被放到第j个位置,然后原来火柴是按升序排序的,这时需要计算逆序对,也就是交换的最少次数 树状数组 x[i],y[i]:编号,然后z[x[i]]=y[i]:第一列第x[i]根火柴应该对应第二列第y
阅读全文
摘要:显而易见,我们要找子串,每次记录前缀和,算出余数,然后通过一个数组保存余数,答案就是加上之前余数的总和,要注意整除的情况
阅读全文
摘要:这道题抄了答案: 思路:旋转,其实只用旋转四次,因为在换行的过程中旋转其实是没有意义的,因为行列只不过转了个角度。然后主要的是行列的交换,这里我很头疼,写了个盲目搜索,当然wa掉了 问了问某位同志,是这样做的,很巧妙:其实这是一个全排列,一个三个数的全排列套了三个数的全排列,然后该怎么做呢?这里运用
阅读全文