摘要: 参考:https://www.cnblogs.com/CQzhangyu/p/6952371.html 费用流很简单,考虑但是会T。 考虑费用流的本质,流一次需要要找一个能够从当前点到达的距离最小的点x,然后进行增广,然后把c[x] 1,并且会出现一些反向边。 考虑二叉树的性质,任何一条两点之间路径阅读全文
posted @ 2018-04-23 22:01 lokiii 阅读(2) 评论(0) 编辑
摘要: 妙啊 首先暴力建图跑最大流非常简单,s向每个i连流量为p[i]的边,每个i向t连流量为s[i]的边,每个i向j连流量为c的边(i include using namespace std; const int N=10005; int n,c,p[N],s[N]; long long f[2][N],阅读全文
posted @ 2018-04-23 19:46 lokiii 阅读(1) 评论(0) 编辑
摘要: 参考:https://blog.csdn.net/wxh010910/article/details/55806735 以下课件,可并堆部分写的左偏树 cpp include include using namespace std; const int N=600005; int n,m,tot,f阅读全文
posted @ 2018-04-23 17:06 lokiii 阅读(2) 评论(0) 编辑
摘要: 参考:https://www.cnblogs.com/lcf 2000/p/6809085.html 设f[i][j][k]为第i个学校派出的赛艇数量在区间j内,并且区间j内共有k个学校的方案数 把数量区间离散化,转移是: 当k==1 $$ f_{i,j,k}=\sum_{i'=1}^{i 1}\s阅读全文
posted @ 2018-04-21 17:26 lokiii 阅读(4) 评论(0) 编辑
摘要: 看成网络流建图想了好久... 实际上5个是可以状压的 设f[i][k]为到第i个围栏状态为k的方案数,因为考虑到重复,设g[i][k]记录i开始,状态为k的孩子有几个 状态转移很好想:f[j][k]=max(f[j 1][(k&15) include using namespace std; con阅读全文
posted @ 2018-04-21 09:58 lokiii 阅读(1) 评论(0) 编辑
摘要: 参考:http://www.cnblogs.com/mmlz/p/4456547.html 枚举根,然后做树形dp,设f[i][1]为i是蓝线中点(蓝线一定是父子孙三代),f[i][0]为不是,转移很好想,但是这是n方的 考虑优化换根,记录最小值和最大值就能换根了 cpp include inclu阅读全文
posted @ 2018-04-21 08:12 lokiii 阅读(1) 评论(0) 编辑
摘要: 用manacher找出本质不同的回文子串放在SAM上跑阅读全文
posted @ 2018-04-20 16:21 lokiii 阅读(1) 评论(0) 编辑
摘要: 首先看这个得分方式,容易发现就相当于分k段,每段的值和两两乘起来。 这样就很容易列出dp方程:设f[i][j]为到j分成分成i段,转移是 $$ f[i][j]=max { f[k][j]+s[k] (s[j] s[k]) } $$ 然后显然这个可以斜率优化,随便推一推式子,假设k选p大于选q,那么 阅读全文
posted @ 2018-04-18 14:52 lokiii 阅读(3) 评论(0) 编辑
摘要: 参考:http://hzwer.com/6888.html 把k条道路权值设为0,和其他边一起跑MST,然后把此时选中的其他边设为必选,在新图中加上必选变缩成k个点,把所有边重标号,枚举k跳边的选取情况,和其他边做MST,建出树,k条边的权值在树上取min cpp include include i阅读全文
posted @ 2018-04-18 10:38 lokiii 阅读(2) 评论(0) 编辑
摘要: 第一次听说斯坦纳树这种东西 先dfs预处理出来dis[i][j][k]表示格子(i,j)向k方向转移能到哪,记忆话搜索预处理,注意如果有环的话特判一下 设f[i][j][x][y]表示复合机器人i j在(x,y)生成需要推得步数,用spfa转移,因为时间比较紧所以优化spfa,把能转移的放进一个队列阅读全文
posted @ 2018-04-16 16:04 lokiii 阅读(8) 评论(0) 编辑
摘要: 可并堆就可以,但是想复健一下主席树。 考虑枚举管理者,然后选忍者的时候在子树中贪心的从小到大选。做成dfs序就是选区间内和小于等于k的最多点。可以用主席树,查询的时候在主席树上二分即可 这里注意,为了方便起见,离散化的时候即使值相同也离散成不同值,这样可以保证主席树叶子结点的size最大为1,方便二阅读全文
posted @ 2018-04-16 09:56 lokiii 阅读(6) 评论(0) 编辑
摘要: 关于没有忍者的区间用线段树判就好啦 然后把剩下的区间改一改:l/r数组表示最左/最右没被删的点,然后删掉修改后的左边大于右边的;l升r降排个序,把包含完整区间的区间删掉; 然后设f/g数组表示i前/后的最少需要忍者数,这个贪心来转移即可,就是把忍者放在区间的最右/左位置 然后对于每个r判断。为什么是阅读全文
posted @ 2018-04-15 22:08 lokiii 阅读(3) 评论(0) 编辑
摘要: 我是智障 3,读优写错了调了半天没发现= = 虽然是个最短路却有网络流一般的神建图啊。 首先发现在拐角处转弯是最优的,于是先离散化,然后矩形的四个顶点向距离它最近的上下左右点连边,跑spfa即可。 就是难写啊,还要判断无解:st在矩形里;dis[t]=inf阅读全文
posted @ 2018-04-15 17:04 lokiii 阅读(3) 评论(0) 编辑
摘要: 画图可知,每一行的状态转移到下一行只有两种:奇数列不变,偶数列^1;偶数列不变,qi数列^1 所以同一行相邻的变革染色格子要放到同一个并查集里,表示这个联通块里的列是联动的 最后统计下联通块数(不包括第一行的这一列已经被染色的情况)快速幂一下即可。 cpp include include inclu阅读全文
posted @ 2018-04-15 09:31 lokiii 阅读(1) 评论(0) 编辑
摘要: 参考:https://blog.csdn.net/qpswwww/article/details/45334033 讲的很清楚 做法比较像旋转卡壳但是具体是不是我也不清楚.. 首先知道只要求出每种方案在圆上和圆中的和就可以。 注意到题目中有一个限制:“保证任何三个房子都不在同一条直线 上,任何四个房阅读全文
posted @ 2018-04-14 18:52 lokiii 阅读(3) 评论(0) 编辑
摘要: 仔细想想好像没学过斜率优化.. 很容易推出状态转移方程\\( f[i]=max\{f[j]+a(s[i] s[j])^2+b(s[i] s[j])+c\} \\) 然后考虑j的选取,如果选j优于选k,那么: $$ f[j]+a(s[i] s[j])^2+b(s[i] s[j])+c f[k]+a(s阅读全文
posted @ 2018-04-14 16:20 lokiii 阅读(2) 评论(0) 编辑
摘要: 我是智障系列。用了及其麻烦的方法= =其实树形sp就能解决 设直径长度+1为len(环长) 首先k=1,直接连直径两端就好,答案是2\ n len 然后对于k=2,正常人的做法是树形dp:先求直径,然后把树的直径上的所有边权标为 1,再求一次直径设新直径+1为len2,答案是2\ (n−1)−len阅读全文
posted @ 2018-04-14 11:27 lokiii 阅读(2) 评论(0) 编辑
摘要: 先把水泥路建生成树,然后加鹅卵石路,这里加的鹅卵石路是一定要用的(连接各个联通块),然后初始化并查集,先把必需的鹅卵石路加进去,然后随便加鹅卵石路直到k条,然后加水泥路即可。 注意判断无解 cpp include include using namespace std; const int N=20阅读全文
posted @ 2018-04-13 22:07 lokiii 阅读(3) 评论(0) 编辑
摘要: 写题五分钟读题两小时系列…… 看懂题的话不算难,然而我去看了大佬的blog才看懂题…… 题目大意是:一个原字符串,其中有一种通配符,合法串的定义是这个串(不含通配符))可以匹配原串并且这个串最多分成k段就能使每一段字典序单调不降。求在所有合法串中字典序第r大的。 设f[i][j][k]表示第i个字符阅读全文
posted @ 2018-04-13 21:08 lokiii 阅读(3) 评论(0) 编辑
摘要: 参考:https://blog.csdn.net/clover_hxy/article/details/70767653 人生第一次交互题...不是很难但是思维和传统题差别挺大的(以及并不会本地测试= =),详见参考blog和代码吧阅读全文
posted @ 2018-04-13 19:37 lokiii 阅读(10) 评论(0) 编辑