07 2019 档案
摘要:本来早就打算写退役记了,没想到苟到了今天,也是不易了 (可能游记会咕,还是写退役记吧qwq) 也是,作为一个菜的一批高二选手,NOI=退役 在这科竞赛里,我见识到了极限的智慧 我见过了初二玩转高数的神,见过了学了六年的魔,看到了南方一个省全是集训队的高手,而你我,都只是普通人罢了。 我看到了我看不懂
阅读全文
摘要:1.最小生成树: kruscal: 2.最短路: spfa(最好不要写,他死了)... dijisktra(这个比较好) 3.LCA 倍增版本: 树剖版本: 4.tarjan 有向图tarjan缩点+spfa最长路 无向图割边: 无向图割点: 5.网络流 最大流: 费用流: 有源汇上下界最大流 有源
阅读全文
摘要:LCT神题... 首先暴力的做法就是每次在一个区间上link,然后暴力查询,时间复杂度 但是我们可以发现的是,每棵树之间互不影响! 因此我们可以考虑离线之后分别统计每棵树 但是这样做其实并没有优化时空啊! 但是等等,我们在考虑一下:我们的操作都是区间操作,也就是说我们可以用一个类似差分
阅读全文
摘要:并查集水题 离散化之后直接并查集合并,在不等时判断两者是否在同一个集合內即可 注意排序 贴代码:
阅读全文
摘要:线性基好题 首先,如果一条路径被经过了两次,那么这条路径上的权值等于没有(废话) 基于这一点,我们其实已经找到了解决问题的方法了! 首先,由于可以反复经过一条边,因此我们可以把一条合法的路径看成这样的结构: 从到有一条链,这条链上挂着一些环,答案是链的贡献异或环的贡献(因为从链到环的边一
阅读全文
摘要:有人说这题像游走... 关于游走的思想,他死了... 明明直接从期望dp的角度考虑更简单合理嘛 首先由于是异或运算不妨逐位考虑 对于每一位,设状态表示从第个点到第个点,这一位上是的概率 那么我们按边权讨论转移: 若这条边边权为:$f[i]+=\frac{1-f[t
阅读全文
摘要:很好的一道题,对理解最小割有很大帮助 首先,不难发现本题与网络流24题中的某一道很类似,我们可以先跑一次dp求出每个节点的LIS,然后拆点,拆出的两点之间连流量为删除的代价的边,剩下的点之间按dp的转移连流量正无穷的边,最后跑最小割即为第一问答案 但是第二问有个问题:又引入了一个量要求最小割字典序最
阅读全文
摘要:这题并不是太难 首先题目我们将每个城市拆点,由源点向一端连容量为初始人数的边,由另一端向汇点连容量为最后人数的边,然后按照题目要求从一端向另一端连容量无穷大的边 这样跑出最大流之后我们只需比较这个流量与总人数是否相等就知道是否合法了 至于输出方案,一个点向另一个点的所有流量都会体现在反向边上,因此我
阅读全文
摘要:费用流好题 本题的建图很有意思 正常我们看到棋盘问题应该先对整个棋盘黑白染色构成一个二分图,然后再考虑建图的问题 但是本题题目中已经明确区分了不同的斜线,问题在于怎么保证一个"L"形 因此我们进一步分析:显然柱子应该放在有代价的位置,我们应该由这样的位置向上下左右连边,保证有两个就行 但是这样建图是
阅读全文
摘要:首先题意就是裸的最小割啦 然后考虑如何统计边数 这里有一个trick: 我们设定一个大于的阈值,对于每条边的边权我们乘这个阈值+1后跑最小割,得到的答案除以阈值就是真正的最小割,取模阈值后就是最少割掉的边数 为什么? 我们考虑:设原来的最小割割掉的边权为$v_{1},v_{2}...v_{n}
阅读全文
摘要:思想基本同bzoj 2594,但是多了一步 首先我们发现这时的边有两个属性了,因此我们考虑先去掉其中一者的限制 我们把所有边按大小排序,然后从小到大加入维护的最小生成树 每次加边时都按照的大小操作bzoj 2594,然后更新答案即可 如果始终不联通输出-1
阅读全文
摘要:很好的一道LCT题目 首先我们可以发现,题目要求的就是最小生成树上的一条树链的最长边的长度,因此我们实际只需动态维护最小生成树即可 然后我们考虑怎么动态维护最小生成树 不难发现,如果涉及在最小生成树上删边,那么这个操作将变得非常复杂,因为我们并不知道删边之后要把什么样的边补充回去才行 但是,如果我们
阅读全文
摘要:LCT好题 首先我们考虑实际询问的是什么: 从LCT的角度考虑,如果我们认为一开始树上每一条边都是虚边,把一次涂色看作一次access操作,那么询问的实际就是两个节点间的虚边数量+1和子树中的最大虚边数量! 这种问题显然树上容斥,如果设表示到根节点需要经过多少虚边,那么答案显
阅读全文
摘要:LCT板子题... 看到题目中的操作很显然是从向连一条边,每次修改就是删除原来的边再加入一条新的边嘛 然后考虑查询:对于被弹飞的部分,我们统一新建一个节点,把所有越过边界的部分指向这个节点即可 然后在查询的时候只需要拎出查询节点到节点的树链,统计其大小即可
阅读全文
摘要:真·小清新... 其实本题正解是动态点分治,但是考虑到那个东西需要先大力推导一波再套上一个幻想乡战略游戏的搞法,所以还不如大力推导一波,然后无脑套上一个树剖+线段树写法... 首先我们考虑没有换根操作: 没有换根操作时,设每次修改的变化量为,很显然每次修改时只会影响一条树链上的贡献,
阅读全文
摘要:动态点分治好题 首先我们考虑一个暴力做法: 每次修改之后选一个点作为根搜索整棵树,然后换根dp即可 考虑每次换根时,移向的点的消耗会减少子树代价之和*边权,而其余部分代价会增加剩余代价*边权 这样每次换根都是的,总时间复杂度,可以通过...20分! 贴代码: 然后我们考虑正
阅读全文
摘要:首先仍然是点对之间的问题,让我们考虑点分 由于带修改,所以考虑动态点分治 所谓动态点分治,就是在操作之前先模拟一遍点分治的过程构造出一棵新的树,我们称这棵树为点分树,由于这棵树树高是对数级别的,所以修改的时候可以在一条树链上暴力修改 然后考虑本题怎么维护: 首先我们考虑答案如何统计:在统计答案时,我
阅读全文
摘要:点分治好题 统计距离正常点分治统计即可,我们只需考虑何时达到最优 有两种情况: 第一:代价最大的询问两个端点在不同的两个子树中 因为这种情况下,无论根向那个子树移动都会等价地增加到达另一个端点的代价,因此此时总代价已经达到最小 第二:代价最大的询问有多组,且这些点不在同一棵子树中 同情况一,如果我们
阅读全文
摘要:太久没碰点分治的我看见这题已经失了智... 首先这种统计肯定要想一想点分,当然也有树形dp的做法,不过还是用点分吧... 我们每次找到一个根,然后统计以这个根为中心,模3为0,1,2的路径数量(这一点可以直接搜索),然后做个卷积统计一下即可 但是可能会出现重复的情况,重复来源于这种时候: 如图所示,
阅读全文
摘要:首先我们考虑的情况,显然以为分界线可以将整个序列分成两部分,就像这样: 、 那么我们考虑:在这个东西前面才会有前缀最大的统计,在这个东西后面才会有后缀最大的统计 这样就剩下了个元素,而我们需要把这个元素分成个集合,然后把每个集合的最大的一个放在一端,然后
阅读全文
摘要:莫比乌斯反演 还是推式子: 设 那就是上一道题了 推的过程如下: $\sum_{i=1}^{a}\sum_{j=1}^{b}\sum_{d=1}^{min(a,b)}[gcd(i,j)\equ
阅读全文
摘要:emmmm... 做这题之前强烈推荐先去写一下压位高精度加法,压十八位就行... 然后有一个东西叫序列自动机,其实就是一个指针,用的时空找到每个字符的下一次出现位置 然后如果想找到两个字符串的所有公共子序列只需要在序列自动机上dfs即可 重点看代码:
阅读全文
摘要:这是个假题吧... 首先显然上虚树了 然后我们考虑一下最优策略: 如果虚树两节点都是关键点,那么这两点之间至少选一个 如果一个节点本身是关键点,那么我们必须覆盖下下面所有点 如果一个节点本身不是关键点,那么这个点可选可不选,这一点要基于下面有多少个上来来决定 也就是说,我们在虚树上dfs的过程中需要
阅读全文
摘要:显然dp嘛 首先我们发现,蓝线的连接方式是有限的,具体的,对于每一个节点,其实只有两种可能的连线方式: 第一种:该节点是新来的节点,两个子节点是初始红线的两侧 第二种:该节点是新来的节点,一个子节点和该节点的父节点是红线的两侧 但是,初始是有一个节点的,因此我们考虑进行树形dp时以这个点为根 如果我
阅读全文
摘要:显然dp 考虑每个节点需要考虑的问题: 第一:这个点下面被覆盖的情况 第二:这个点对上面的贡献 据此我们设计状态: 表示以为根节点的子树中已经覆盖好了下面剩余层,只剩下上面层还没覆盖 表示以为根节点的子树中每个点都被覆盖了,而且还能向上覆盖
阅读全文
摘要:神题啊... 首先我们考虑68分的暴力: 对于询问串的每个位置,我们维护一个表示以为终点向前至多能与模式串匹配多长,这一点可以在把询问串放在模式串的后缀自动机上跳跃得到 接下来考虑统计答案: 对于询问串同样建起一个后缀自动机,我们知道后缀自动机上的每个节点维护的位置是一
阅读全文
摘要:首先我们考虑一个暴力的dp: 我们从小到大加入每个数,当我们加入第个数时,可能产生的逆序对数量是(这个证明考虑把第个数放在哪即可),这样可以列出一个递推式: 设状态表示已经加到了第个数,此时的逆序对个数为,那么有转移:$dp[i][j]=
阅读全文
摘要:不想写题解...这题就是在跑最短路的时候记录下每个点最短路树上可能的父亲,然后把每个点的父亲数量乘起来就行了 代码:
阅读全文
摘要:考虑容斥,容斥系数-1 首先不难发现,如果没有一个公司一条边这个限制的话,就是一个很简单的矩阵树定理了 可是有了这个限制,就会出现重复 因此我们用容斥原理来解决 我们枚举哪个(些)公司没被用到,对剩下的公司跑矩阵树定理,乘一个容斥系数累计贡献即可 时间复杂度 代码:
阅读全文
摘要:线段树优化建图板子题 首先暴力建图显然是不可取的,但是我们发现建图要求是点和区间之间的问题,所以考虑用线段树优化 但是怎么优化呢? 如果用一棵线段树很难处理同时出边和入边,因此我们考虑用两棵线段树(类似拆点),一棵线段树作为起点,另一棵线段树作为终点,然后在两棵线段树之间连边即可 这样的话连边的方式
阅读全文
摘要:考察后缀自动机的性质:每个节点上维护的子串数量等于自己与父节点的之差 据此,我们在建后缀自动机的时候,对于每个插入的节点加上他与父节点的之差即可 什么?分裂出来的节点怎么办?无所谓!不累计! 因为假设我们有一个点,其父亲为,分裂出的节点为,那么我们知道,进行这次
阅读全文
摘要:多有趣的一道题啊... 考场上的思路: 首先我们可以通过hash判断出每个类串是几个类串的前缀,从这个类串向对应的类串连边 然后我们直接按支配关系从类串向类串连边,相当于以类串为中转构造了一张类串的图,在这张图上跑一次最长路即可 这样做是40分(所以4
阅读全文
摘要:后缀自动机基本应用 对询问串建起后缀自动机,然后建起parent树,做一次子树统计就知道了每个节点代表的字符串出现次数 接下来我们只考虑出现次数等于的那些点,对于任意一个点我们知道他代表的子串长度是连续的,长度范围在之间,那么我们做个差分,最后
阅读全文
摘要:首先用splay维护嘛 然后查询的时候就把对应的节点转到根,左子树大小就是排名 然后再做个区间翻转即可
阅读全文
摘要:splay裸题嘛... 直接按书的编号顺序建splay,然后维护即可 把移动位置变成插入和删除
阅读全文
摘要:首先是动态dp了嘛... 然后考虑怎么做:首先列出dp方程,大概长这样: 看着不太像动态dp呀... 考虑拿出重儿子的贡献,然后套模型,大概能构造出一个这样的东西: 设 $\begin{p
阅读全文
摘要:首先我们考虑事件发生的真正的先后顺序 我们考虑在某一个点的子树内有两点,先后在,两个时间向上发送信息 那么两者谁会先传到呢? 推个小式子:设先到达,那么一定要满足的条件是<$dep_{j}-
阅读全文