自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 洛谷 P2711 小行星

题面题意给出n个三维空间中的点,每次可以消除三维中至少有一维相等的点,问至少几次可以消除所有点.做法首先想到的是dp,但是很难记录状态,然后考虑网络流,想对每个点间两个点记为a,b两点,对所有a点和它共面的点的b点都连一条边,然后跑费用流,但是建边的复杂度就高达O(n^2),不仅会T,还会M. 正确思路是要抓住x,y,z三维都小于等于500,这就意味着可以考虑对于数值大小来建图,可以将这题转化为最

2018-04-28 17:21:36 322

原创 BZOJ 1001: [BeiJing2006]狼抓兔子 求平面图的最小割

题面题意给出一幅无向平面图,求s到t的最小割. 对偶图:将原图中的每一块区域当作一个点,原图上的每一条边转化为这条边两边区域之间的一条边,任何只在顶点处有交点的图(平面图)都有对偶图.做法这道题如果直接跑最大流,复杂度显然不对,但因为它存在对偶图,我们可以将题目转化为求左下角这块到右上角这块的最短路,对于样例可以这么建图 首先建对偶图 之后去掉原图就可以得到 可以发现从0点到13点(

2018-04-23 10:59:51 186

原创 线性基

作用用于处理多个数中选取一些数的Xor最大值,最小值,并且能否得到某个值.可以在log的时间解决实现方法是一个大小为log的,对于每一位记录一个最高位为它的某个数的数组,要求这个数组可以表示所有这些数的子集的Xor值,初始全部为零插入及查询插入数u时,从高位到低位遍历,如果u的这一位有值,则进行判断,若数组的这一位还没有数,则改为u并且break,否则u^数组中的这个数(详见代码),这样操作之后u只

2018-04-21 15:36:26 608

原创 uoj #117. 欧拉回路 套圈法

题面题意给出一幅有向或无向图,判断是否存在一个环走遍所有边,若有则输出求其中的环.做法首先判断很容易,对于无向图只要联通且度数都是偶数即可,对于有向图,则要联通且入度等于出度,问题在于如何找到这个环. 我们可以发现,如果随便走的话,必然会回到出发点,但是不一定走过所有的边,而剩下的图恰是一条与我们之前走的路有交点的欧拉回路,没有走完的原因就是我们之前有些地方走错了,因此要退回到两条路的焦点,也就是

2018-04-19 19:27:42 8314

原创 洛谷 P3811 【模板】乘法逆元 线性递推逆元

题面题意给出n,p,求1~n所有数模p意义下的逆元.做法无论是扩展欧几里得还是费马小定理都是O(n*log)的,会T,这题因为是求1~n的所有数的逆元,因而可以递推,若要求inv[i],则可以设k=p/i,b=p%i. 那么k*i+b=p 则k*i+b与0同余. 所以k*i与-b同余. 所以k*inv[b]与-inv[i]同余. 所以inv[i]=p-k*inv[b]%p 因为inv[b

2018-04-19 07:42:59 1315

原创 codeforces 768E. Game of Stones

题面题意在Nim取石子的游戏上作了升级,对于同一堆石子,如果曾经取了k个,则不能再取k个,不能再取的人输,取完的人赢,判断后手是否能赢.做法如果去掉限制条件,那么这只要Xor所有石子的个数即可,现在其实可以将题目转化为原来的题目,对于一堆石子可以求出它最多能被取几次,比如11个石子最多能被取4次,那么它就可以被看成4个石子,因为可以将11个变成最多还能取0,1,2,3次的石子,将转化后的石子数Xor

2018-04-18 20:40:06 291

原创 Destruction of a Tree CodeForces - 964D

题面题意给出一棵树,你可以摧毁其中度数为偶数的点,同时与之相连的点将被一起摧毁,问能否摧毁所有点,若能,还要输出方案.做法首先可以发现点数为偶数的肯定不行,因为每次删除偶数条边,因此对于一对父子,若子节点的字子树大小为奇数,则肯定先摧毁其父节点再摧毁它,反之先摧毁其父节点再摧毁它,我们可以据此得出父子间的先后关系,再进行拓扑排序即可得出答案.代码#include<iostream>#include

2018-04-18 14:02:31 715

原创 洛谷 P4455 [CQOI2018]社交网络(矩阵树定理,求行列式)

题面题意给出一个DAG,求以1为根的生成树的个数.做法这题的关键是要知道矩阵树定理,就是说对于一幅图,构造出其邻接矩阵和入度矩阵(对角线上为每个点的入度),并用入度矩阵减去邻接矩阵得到的矩阵的行列式即为答案. 矩阵的行列式就是对于所有种每行每列各选取一个元素的积的和,具体而言,对于三阶矩阵a,其行列式为: a[1][1]*a[2][2]*a[3][3]+ a[1][1]*a[2][3]*a[3

2018-04-17 19:17:30 1103

原创 洛谷 P4454 [CQOI2018]破解D-H协议

题面题意给出四个数g,p,A,B,其中有a,b满足g^a%p=A,g^b%p=B.求g^(a*b)%p.做法首先a,b< p,可以发现只要求出a,b中的任意一个值即可得到答案,但如果暴力枚举a的话复杂度为O(p),显然过不了. 可以考虑分块,令k=sqrt(p),那么就可以得到如下等式: a=u*p+v(u,v<=k) 所以g^(u *p) *g^v=A 移项得g^(u *p)=A *Inv

2018-04-17 18:55:35 375

原创 cdq分治

作用优点是可以代替高级数据结构相互嵌套,而且十分好写. 缺点是必须离线.实现方法可以和分治辨析: 普通分治将一个大问题分成两个相互独立的子问题,去分别解决,而cdq分治用于解决一个子问题会去影响另外一个子问题的题目,比如说归并排序求逆序对就是cdq分治. 实现时先解决影响另一子问题的子问题(一般为左边的那部分),然后再解决右边的. 具体建议通过题目来理解.例题题面题意已知一个数列,你需要进行

2018-04-15 20:29:18 7686

原创 K-D Tree

作用一种用于储存多维数据的数据结构,同时可以查询多维空间中距离它最近的一个点.做法build首先它是一棵二叉树,而每一层用不同维进行分组,标准写法是每次求出每一维的方差,选取方差最大的那一维作为比较依据(后面与二叉查找树相同),找到这一维的中位数,分成两组,然后递归建树,复杂度为O(n*(logn)^2). 但实际上可以rand()一维再rand()一个分界点,之后比它大的放左子树,比它小的放右子

2018-04-13 20:25:27 284 1

原创 UOJ #3. 【NOI2014】魔法森林

题面题意给出一张无向图,每条边有a,b两个权值,问从1到n的所有路中,经过的边的a最大值与b的最大值之和的最小值是多少做法总体思路是枚举a,b中的一个值,然后对边按其中一维进行排序,然后一边加边,一边求出此时的最短路来更新答案.法一:SPFA(非正解)每次加边后用SPFA算一次最短路,这样虽然可以过原题的所有数据,但是复杂度不正确,无法过UOJ上的hack数据,因而不推荐.代码#include<io

2018-04-11 16:44:02 364 1

原创 LCT

作用一种动态树,用于维护森林,支持加边,删边,换根等操作,每次操作的复杂度均为log.做法将每棵树分成多条实链,实链之间用虚边连接,要求每一条实链不存在深度相同的点,之后每一条实链再用splay维护,并且维护时保证每个splay维护的子树的中序遍历深度递增,这样就可以动态地修改虚边和实边了.核心操作:access将某个点到根的路径变为实边,可以发现到根的路径将会经过多个splay,每次要将两个spl

2018-04-10 16:15:43 502 1

原创 bzoj 2434: [Noi2011]阿狸的打字机

题面题意给出一个字符串,表示一系列操作,对于被操作串(初始为空串)一共有一下三种操作: 1.给出a~z中的一个字符,表示在后面加上这个字符 2.B,删去一个字符 3.P,记录下此时的操作串 最后多次询问i串在j串中出现了几次做法根据数据范围,如果暴力模拟,记录下每次操作后的字符串,空间立刻就炸了,所以肯定要用字典树来存. 还可以发现如果对每次询问都暴力匹配或是在AC自动机上直接匹配,绝对会

2018-04-06 12:01:19 192

原创 bzoj 2342: [Shoi2011]双倍回文

题面题意令W(R)表示字符串W的反串 给出一个字符串,问其中最长的WW(R)WW(R)的长度是多少.做法求的字符串是个回文串,而且可以分成两个一样的偶数长度的字符串,那么可以考虑枚举两个相同字符串中间的空隙x并考虑右边那个字符串中间的空隙y的最大值. 首先用马拉车算法预处理出mx数组表示以某个空隙为中间的回文串的长度的一半,根据回文串的性质,不难得出以i为中心,长度的一半小于mx[i]的字符串也

2018-04-06 07:56:46 197

原创 manacher(马拉车)

作用可以在O(n)的时间计算出以每个字符或者两个字符为中心的最长回文串的长度,也可以凭借此求出最长回文串等. 相比于回文自动机,manacher侧重于求以每个或两个字符为中心的最长回文串,而回文自动机则侧重于求以每个字符为左右端点的最长回文串,而且manacher更加好写.实现方法首先我们在字符串两两字符之间加入永远不可能出现的字符,比如:!@#$%^&*,这样原串中的所有回文串都有一个中心.

2018-04-05 16:46:32 195

原创 bzoj 2565: 最长双回文串

题面题意给出一个回文串,求相邻两个回文串的最长长度之和.做法像这样涉及两个回文串的关系的题目,都可以考虑正着和反着分别加入回文自动机,预处理出以每个点为左右端点的最长回文串的长度,最后再枚举断点统计答案即可.代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#define N 500100usin

2018-04-05 15:52:31 652 1

原创 洛谷 P2597 [ZJOI2012]灾难 灭绝树(支配树)

题面题意给出一张食物网,问当每种生物分别灭绝后会让其他一共几种生物灭绝(没有食物).做法可以发现生物之间的灭局关系会形成一片森林,我们可以用一个根节点将所有树合并成一棵树,也可以理解为新增一种”生物”–太阳,所有生产者会因为它的灭绝而灭绝. 首先对所有生物进行拓扑排序,然后考虑安拓扑序一个一个节点慢慢加入,在加入第i个节点时,不难发现它的所有食物的lca(生产者视为以太阳为食物)到根的这条链上的任

2018-04-04 08:32:50 466

原创 zkw费用流

作用最终流量较大, 而费用取值范围不大的图,或者是每次增广的路径段数较少(像二分图)的图普通的费用流相对较慢,因此可以采用在普通费用流上修改的zkw费用流来求解.做法对于普通费用流,因为每次增广后有一些边会因流量为0而导致一些点的最短路增大,但没有必要再跑一遍spfa. 在dfs增广的过程中,我们可以顺便求出哪些点的最短路并没有增大,也可以顺便求出那些最短路增大的点最少增大了多少,求出所有增大长度

2018-04-03 16:14:06 371

原创 股神小L 2016Vijos省选集训 day1

题面小L厌倦了算法竞赛,希望到股市里一展身手。他凭借自己还行的计算机功底和可以的智商,成功建立一个模型预测了一支股票接下来n天的价格。我们把这支股票第i天的价格称为a_i。在接下来n天里,每一天小L可以选择花费a_i买入一股或者卖出一股从而获得a_i元收入。 当然小L卖出股票的时候,自己的账户上必须要有至少一股的剩余。现在小L希望知道,在n天过去之后,采取最优策略的情况下自己最多赚到多少钱。注意小

2018-04-03 13:25:54 565 1

原创 poj 2778 DNA Sequence

题面题意给出至多10个由A,G,T,C组成的字符串,问长度为n(n<=2e9),由A,G,T,C组成的且不包含之前给的几个字符串的字符串有几个.做法因为是多个字符串的匹配问题,首先建出AC自动机,若n比较小则可以在自动机上dp,但因为n很大,而且给出的字符串又短又少,故可以用矩阵快速幂. 首先找出自动机上的所有合法节点(不包含给出字符串的节点),然后统计出它们后面加一个字符能够到达的节点及个数,保

2018-04-01 17:54:46 258

原创 洛谷 P2371 [国家集训队]墨墨的等式

题面题意给出n个数,每个数可以选无数次,现在问l与r之间有多少数可以作为选取数之和。做法因为数据范围很大,所以根本不能一个一个去更新,但可以从余数的角度去考虑。 我们令这些数中最小的数为t,p为小于t的非负整数,则若k*t+p可以被取到,那么对于所有的k2>=k,k2 *t+p也可以被取到,因此我们只要找到所有最小的能够被取到的k *t+p即可算出答案。 这可以用最短路来做,对于0~t-1的所有

2018-04-01 09:02:16 646

空空如也

空空如也

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

TA关注的人

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