09 2016 档案
摘要:A. Graph Coloring 答案为很好判,为只需要二分图染色,对于,首先爆搜哪些边要染成第种颜色,然后二分图染色判定即可。 B. Decimal Fraction 枚举前缀,那么只需要求出后面部分的最小循环节即可,将串翻转之后进行KMP,循环节长度$=i-next[i
阅读全文
摘要:首先把所有串拼起来,后插入的串在前面,得到一个大串。 那么任意时刻,每个串是由这个大串的若干个不相交的子串从左到右拼接而成。 用线段树维护每个串,每个节点维护一个标记,表示区间内的串要加上什么前缀。 用可持久化线段树维护这些串和标记,那么合并就是线段树的合并,因为取值区间互不相交,所以每次合并的复杂
阅读全文
摘要:因为是二分图,所以最大独立集总点数最大匹配。 因为是树,所以具有贪心性质,设表示是否与其孩子匹配,表示的孩子里为的个数,则。 加入一个新的叶子的时候,影响的是连续的一段,这一段上与它距离为奇数的点的都要是$
阅读全文
摘要:A. Explosions 注意到将炸弹按坐标排序后,每个炸弹直接引爆和间接引爆的都是连续的一段区间,因此只需要求出每个炸弹能间接炸到的最左和最右的炸弹即可。 建立图论模型,炸弹向炸弹连单向边表示爆炸会直接引起的爆炸,那么建完图后求出SCC缩点然后拓扑排序+DP即可求出答案。
阅读全文
摘要:对于一个固定的区间,显然只要将里面的数字从小到大排序后将最小的个和最大的个配对。 如果固定左端点,那么随着右端点的右移,值单调不降,所以尽量把右端点往右移,贪心分割即可。 为了使得扫过的部分一定被分割下来,考虑倍增枚举区间长度,然后排序检验。 在得到区间长度属于某
阅读全文
摘要:把第一行每个位置设成未知量,对于之后每一行,都可以用第一行的未知量线性表示。 那么只需要加上最后一行的个方程,对于不能按的那个位置也列出对应的方程。 用高斯消元判断是否有解即可,时间复杂度。
阅读全文
摘要:枚举LCP以及下一位变小成什么,统计出剩下的有几个可以在原位置。 然后枚举剩下的至少有几个在原位置,容斥计算答案。 时间复杂度。
阅读全文
摘要:考虑枚举回文中心,然后向两边扩展,当匹配到当前串的边界的时候,枚举下一个串接上。 这个过程可以通过记忆化搜索来完成,设: 表示对于这个位置,等待匹配的最长回文子串。 表示对于这个位置,等待匹配的最长回文子串。 如果在
阅读全文
摘要:这道题主要是要解决以下两个问题: 问题1: 给定一个点,如何取出所有经过它的下水道? 一条下水道经过等价于它起点在的子树里面且终点不在的子树里面,或者两端点的lca就是。 对于第一种情况,也就是说起点在的dfs序子区间里,终点小于或者大于$en[x]
阅读全文
摘要:设表示选择的答案区间左端点为时,区间长度最小是多少。 那么每来一批人的时候,设为右边最近的一个可行决策,则。 注意到的形式是一条条斜率为的线段,且截距单调不下降,故每次修改可以转化为对截距的区间赋值。 用线段树维
阅读全文
摘要:首先将每个平原缩成一个点,建出图,相邻两个点之间的边权为它们高度的较小值。 用Kruskal算法求出这个图的最大生成树,每次合并两个连通块时新建一个点指向它们,得到一棵有根树。 对于每个点,求出它子树内最高的峰,那么对于每个叶子,在它到根的路径上二分查找即可。 时间复杂度$O(nm\log(nm))
阅读全文
摘要:根据Lucas定理,问题等价于在进制下每一位分别求组合数最后乘积模。 因为答案为的并不好算,所以可以考虑用减去其它所有的答案。 那么每一位的组合数都不能是,那么这就保证了的每一位都不大于,所以无需考虑这个限制。 求出模下每个数的指
阅读全文
摘要:树分治,对于每个分治结构,维护两棵线段树。 第一棵按dfs序维护所有点到重心的距离,第二棵维护每个分支的最长链。 那么当前结构对答案的贡献就是第二棵线段树的最大值次大值。 对于操作,如果是激活某个点,则直接把它距离,隐藏某个点则是。 对于操作,相当于子树
阅读全文
摘要:枚举每条树边,将其断开,那么两侧肯定取带权重心最优。 考虑如何求出每个子树的重心,枚举其所有儿子,通过重量关系就可以判断出重心位于哪棵子树。 然后将那棵子树的重心暴力往上爬即可,因为每个点作为重心肯定是一段连续的链,所以复杂度为。 然后就是如何求出砍掉每棵子树之后剩下的部分的重心。 设当
阅读全文