01 2018 档案

摘要:$AC自动机+矩阵快速幂$ $多串统计问题...上AC自动机$ $看见len很大,那么我们就得用矩阵乘法$ $关于dp,题目中希望尽量多地匹配,AC自动机的匹配过程满足了这个条件,所以转移按AC自动机匹配的顺序转移就行了$ $如果到了一个终止节点,那么我们要统计,这里额外增加一个节点专门统计答案$ 阅读全文
posted @ 2018-01-29 19:58 19992147 阅读(118) 评论(0) 推荐(0) 编辑
摘要:$虚树+树形dp$ $虚树复习$ $虚树是用来解决每次从树中选出一些点进行统计一类问题的方法,每次把这些点建出虚树,最多不超过2*k个点$ $建虚树的过程挺简单的,就是用一个栈记录当前dfs的过程,如果出现分叉就回溯。重点在于虚点的加入,就是两个点的lca,这个判一下就行了$ $树形dp的过程比较简 阅读全文
posted @ 2018-01-29 19:35 19992147 阅读(111) 评论(0) 推荐(0) 编辑
摘要:$模拟退火$ $这种全局最优的问题用模拟退火$ $模拟退火就是每次向四周随机移动,移动的幅度和温度成正比,如果新的位置更优就接受,否则按一定概率接收,概率和温度成正比$ $最后稳定后再在最优解附近蹦跶几下看看有没有更好的$ $你问我这是什么道理,我说无(我)可(不)奉(知)告(道)$ #includ 阅读全文
posted @ 2018-01-28 22:31 19992147 阅读(105) 评论(0) 推荐(0) 编辑
摘要:$hash+倍增floyd$ $hash预处理出两个串中一个串最少需要加多少字符变成另一个$ $然后把名字看成点,距离看成边,相当于计算走k步的最短距离$ $套用倍增floyd解决$ #include<bits/stdc++.h> using namespace std; typedef long 阅读全文
posted @ 2018-01-28 22:23 19992147 阅读(89) 评论(0) 推荐(0) 编辑
摘要:$st表+并查集$ $考虑暴力方法:我们每次将对应相等的位置用并查集连起来,那么最终答案就是9*10^{连通块个数-1}$ $很明显上面这个办法过不去,问题在于重复次数太多了,如果一个区间已经对应相等了就不用再次连,用st表优化这个过程$ $每次向st表一样递归连接,分成log层,每层维护\frac 阅读全文
posted @ 2018-01-28 22:16 19992147 阅读(90) 评论(0) 推荐(0) 编辑
摘要:$Hall定理+线段树$ $Hall定理:对于有完美匹配的二分图,从全部匹配的那一侧选择k个元素,另一侧至少有k个元素与其相连,这里指的是元素的并集,这个是充要条件,也就是我们可以用这个条件判断二分图是否有完美匹配,这里就用到了。完美匹配就是指全部匹配了$ $题目里人和鞋构成二分图,要求人有完美匹配 阅读全文
posted @ 2018-01-27 20:50 19992147 阅读(116) 评论(0) 推荐(0) 编辑
摘要:最短路+最小生成树 有点忘了... 这题只要判断能不能就行了 具体做法是把所有加油站放到堆里然后跑dij,然后把边权w=d[u]+d[v]+w,跑最小生成树 对于点对(x,y)是否能到达只要判断最大瓶颈路的长度是否>b就行了 具体原因是因为对于一条边(u,v),边权表示了经过这条边的最小油量。 然后 阅读全文
posted @ 2018-01-24 21:32 19992147 阅读(113) 评论(0) 推荐(0) 编辑
摘要:$0.杜教筛$ $杜教筛能解决积性函数前缀和 并且能做到线性以下$ $1.狄利克雷卷积$ $杜教筛通过狄利克雷卷积降低复杂度$ $狄利克雷卷积$ $(f g) =\sum_{d}{f(d)g(\frac{n}{d})}$ $假设我们要求前缀和的函数是f(x)$ $那么设$ $S(n)=\sum_{i 阅读全文
posted @ 2018-01-22 15:41 19992147 阅读(136) 评论(0) 推荐(0) 编辑
摘要:$x^{y^z}=(1+e^x)^{ 2xy^w}$ $\sum_{n/d}\frac{1}{x}$ 阅读全文
posted @ 2018-01-21 17:08 19992147 阅读(69) 评论(0) 推荐(0) 编辑
摘要:fwt 原理并不知道 nim游戏石子异或和=0后手赢 那么也就是求a[1]^a[2]^...^a[n]=0的方案数 这个和bzoj3992一样可以dp dp[i][j]表示前i个数异或和为j的方案数 dp[0][0] = 1 dp[i][j] = dp[i - 1][k] * a[p] p ^ k 阅读全文
posted @ 2018-01-14 22:03 19992147 阅读(149) 评论(0) 推荐(0) 编辑
摘要:还差一道题 bzoj4070 看错题*2- >暴力想不出来 其实我们发现由于每只doge只有在有信息的情况下才会走 那么也就是说每只doge只会连续地走一次 不可能信息传给别的doge之后再传回来 并且只会向一个方向跑 因为只跑一次 那么折返跑肯定是亏的 所以暴力连边就是狗所在的位置向狗连边,狗向能 阅读全文
posted @ 2018-01-14 21:55 19992147 阅读(120) 评论(0) 推荐(0) 编辑
摘要:网络流 如果只有两个的话就是裸的二分图匹配 然而这里有三个元素 由于食物和饮料互相没有关系,只和牛有关系 那么我们把牛拆点x->y cap = 1 然后饮料和食物分别限制x y就行了 #include<bits/stdc++.h> using namespace std; const int N = 阅读全文
posted @ 2018-01-14 21:34 19992147 阅读(110) 评论(0) 推荐(0) 编辑
摘要:斜率优化+cdq分治 这个就是都不单调的情况 dp[i] = max(a[i] * x[j] + b[i] * y[j]) x[j] 表示能买多少a劵 y[j]表示能买多少b劵 化简一下 dp[i] / b[i] = max(a[i] / b[i] * x[j] + y[j]) 非常标准的斜率优化形 阅读全文
posted @ 2018-01-14 21:30 19992147 阅读(98) 评论(0) 推荐(0) 编辑
摘要:斜率优化 斜率优化是指对于dp[i]=max/min(dp[j]+a[i]*b[j]+c[j])这样的方程的优化 -a[i]*b[j]+dp[i]=dp[j]+c[j] 把b[j]看成x,dp[j]+c[j]看成y -a[i]=k dp[i]=b 这就是一次函数的形式,可以看成用斜率为-a[i]的直 阅读全文
posted @ 2018-01-11 18:30 19992147 阅读(94) 评论(0) 推荐(0) 编辑
摘要:线段树 线段树记录到每个位置截止的答案 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 5; int n, m; ll ans; int nxt[N], last[N], a 阅读全文
posted @ 2018-01-11 18:17 19992147 阅读(73) 评论(0) 推荐(0) 编辑
摘要:二分图匹配 首先有个定理:最长反链=最小链覆盖 最小链覆盖可以重复经过点 所以我们不能直接建图 那么我们用floyd判断是否相连 然后建图就行了 #include<bits/stdc++.h> using namespace std; const int N = 410, inf = 1e9; in 阅读全文
posted @ 2018-01-11 18:16 19992147 阅读(104) 评论(0) 推荐(0) 编辑
摘要:数位dp 复习数位dp 数位dp一般用记忆化搜索来解决 观察需要满足的条件,然后计入状态 状态还要记录是否达到上线,以及前导零 比如说这道题 dfs(bit,a4,a8,cnt,last,limit) 由于这道题枚举的时候不可能有前导零,所以就不记录前导零 bit表示当前考虑第bit位,从高到低 a 阅读全文
posted @ 2018-01-11 18:14 19992147 阅读(112) 评论(0) 推荐(0) 编辑
摘要:整体二分+决策单调性 这个方法已经忘了... 决策单调性是指dp[i]由dp[1]->dp[i-1]更新,那么当dp[j]比dp[k]优且j>k时,对于i->n j都比k优 通过这个性质我们可以把dp优化到nlogn 具体做法是整体二分 solve(l,r,L,R)表示当前对于l->r的dp决策区间 阅读全文
posted @ 2018-01-11 18:08 19992147 阅读(87) 评论(0) 推荐(0) 编辑
摘要:lct+并查集 联赛之后忘了很多东西 复习一下 这并不是一棵树,所以我们不能直接上lct 但是把双联通分量缩了以后就是一棵树了 怎么缩呢 就是把splay拆了合并到一个点上 连通性和双联通分量拿两个并查集维护 access的时候x=find(fa[x]) #include<bits/stdc++.h 阅读全文
posted @ 2018-01-05 20:55 19992147 阅读(112) 评论(0) 推荐(0) 编辑
摘要:我已经忘了lct 1.lct能干什么 能维护一个序列,能做线段树做的事 能维护一颗静态的树,能做树链剖分和线段树做的事 能维护一个动态的序列,能做splay做的事 能维护一颗动态的树,能做splay和树链剖分的事 所以lct=splay+树链剖分 2.怎么维护 树链剖分是利用轻重链剖分的性质 那么l 阅读全文
posted @ 2018-01-05 20:44 19992147 阅读(177) 评论(0) 推荐(0) 编辑