上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 38 下一页
摘要: 建立线段树,设$f[x][l][r]$表示当前考虑$x$点,最左端是$l$,最右端是$r$的最少代价。 如果$a$在$x<<1$,$d$在$x<<1|1$, 设$g[a][c]=\min(f[x<<1][a][b]+w[b][c])$, 则$f[x][a][d]=\min(g[a][c]+f[x<< 阅读全文
posted @ 2016-09-19 23:17 Claris 阅读(287) 评论(0) 推荐(0)
摘要: 这道题主要是要解决以下两个问题: 问题1: 给定一个点$x$,如何取出所有经过它的下水道? 一条下水道经过$x$等价于它起点在$x$的子树里面且终点不在$x$的子树里面,或者两端点的lca就是$x$。 对于第一种情况,也就是说起点在$x$的dfs序子区间里,终点小于$st[x]$或者大于$en[x] 阅读全文
posted @ 2016-09-14 02:51 Claris 阅读(3039) 评论(0) 推荐(0)
摘要: 首先将边进行去重,那么有$n\geq\sqrt{m}$。 然后二分答案,转化为判定是否存在两个点它们的出边集合的并集为全集。 那么这两个点必然满足$deg_x+deg_y\geq n$。 不妨设$deg_x\geq deg_y$,那么有$deg_x\times 2\geq n$。 考虑枚举$x$,最 阅读全文
posted @ 2016-09-10 00:25 Claris 阅读(384) 评论(0) 推荐(0)
摘要: 设$f_i$表示选择的答案区间左端点为$i$时,区间长度最小是多少。 那么每来一批人的时候,设$nxt$为$i$右边最近的一个可行决策,则$f_i=\max(f_i,nxt-i)$。 注意到$f$的形式是一条条斜率为$-1$的线段,且截距单调不下降,故每次修改可以转化为对截距的区间赋值。 用线段树维 阅读全文
posted @ 2016-09-08 09:40 Claris 阅读(218) 评论(0) 推荐(0)
摘要: 首先将每个平原缩成一个点,建出图,相邻两个点之间的边权为它们高度的较小值。 用Kruskal算法求出这个图的最大生成树,每次合并两个连通块时新建一个点指向它们,得到一棵有根树。 对于每个点,求出它子树内最高的峰,那么对于每个叶子,在它到根的路径上二分查找即可。 时间复杂度$O(nm\log(nm)) 阅读全文
posted @ 2016-09-07 17:26 Claris 阅读(356) 评论(0) 推荐(0)
摘要: 根据Lucas定理,问题等价于在$P$进制下每一位分别求组合数最后乘积模$P$。 因为答案为$0$的并不好算,所以可以考虑用$n+1$减去其它所有的答案。 那么每一位的组合数都不能是$0$,那么这就保证了$k$的每一位都不大于$n$,所以无需考虑$k\leq n$这个限制。 求出模$P$下每个数的指 阅读全文
posted @ 2016-09-06 16:19 Claris 阅读(331) 评论(3) 推荐(0)
摘要: 树分治,对于每个分治结构,维护两棵线段树。 第一棵按dfs序维护所有点到重心的距离,第二棵维护每个分支的最长链。 那么当前结构对答案的贡献就是第二棵线段树的最大值$+$次大值。 对于操作$0$,如果是激活某个点,则直接把它距离$+=inf$,隐藏某个点则是$-=inf$。 对于操作$1$,相当于子树 阅读全文
posted @ 2016-09-06 11:10 Claris 阅读(246) 评论(0) 推荐(0)
摘要: 枚举每条树边,将其断开,那么两侧肯定取带权重心最优。 考虑如何求出每个子树的重心,枚举其所有儿子,通过重量关系就可以判断出重心位于哪棵子树。 然后将那棵子树的重心暴力往上爬即可,因为每个点作为重心肯定是一段连续的链,所以复杂度为$O(n)$。 然后就是如何求出砍掉每棵子树之后剩下的部分的重心。 设当 阅读全文
posted @ 2016-09-05 14:58 Claris 阅读(783) 评论(0) 推荐(0)
摘要: 首先拓扑,每次取出度数为$2$的点,这样可以把所有三角形都找到。 那么建出对偶图,会发现是一棵树。 对这棵树进行点分治,每次取出重心,DFS求出所有在里面的点,然后从重心$3$个点分别做一次BFS。 对于每个询问,如果不经过重心这个区域,那么递归求解,否则用BFS的结果回答即可。 时间复杂度$O(n 阅读全文
posted @ 2016-08-30 22:55 Claris 阅读(859) 评论(0) 推荐(1)
摘要: 两个函数相同等价于不存在长度为$3$的下降子序列。 先考虑随意填的部分,设$f[i][j]$表示考虑了$[i,n]$,下降子序列第$2$项的最小值的是这里面第$j$个的方案数,转移则考虑往序列里插数字,可以通过后缀和优化到$O(n^2)$。 然后考虑已固定的部分,设$g[i][j]$表示考虑了$[i 阅读全文
posted @ 2016-08-29 17:21 Claris 阅读(498) 评论(0) 推荐(0)
摘要: 如果不存在模糊点,那么答案就是两个串的最长公共子串。 如果模糊点是某个串的开头或者结尾,那么可以暴力枚举另一个串中的某个前后缀更新答案。 否则,假设模糊点在第一个串里是$i$,在第二个串里是$j$,那么此时对答案的贡献为$lcp(i+1,j+1)+lcs(i-1,j-1)+1$。 将两个串用特殊字符 阅读全文
posted @ 2016-08-29 13:42 Claris 阅读(967) 评论(0) 推荐(0)
摘要: 二分答案,转化为判定问题。 建立有向图,$a->b$连边表示$a$是$b$的子集,至此可以处理掉$1$和$2$。 对于$5$,则往对应点的集合塞一个元素,即可满足$5$。 首先求出强连通分量进行缩点,再递推出每个集合的必备元素以及每个集合的所有子集,用bitset加速,可以做到$O(\frac{m^ 阅读全文
posted @ 2016-08-28 20:09 Claris 阅读(268) 评论(0) 推荐(0)
摘要: 对于每个祭坛,算出每条线段阻碍它的角度区间,然后排序求并看看是否有空位即可,时间复杂度$O(n^2\log n)$。 这题在Main上官方时限是0.2S,因此需要几个常数优化: $1.$为了避免用atan2(y,x)算角度,改成算斜率,所以需要分$4$个方向讨论。 $2.$对区间排序时,不要直接对结 阅读全文
posted @ 2016-08-26 00:15 Claris 阅读(258) 评论(0) 推荐(0)
摘要: 题目等价于去掉两条边,使得剩下的图连通,且所有点度数都为偶数。 首先特判掉图一开始就不连通的情况。 求出dfs生成树,对于每条非树边随机一个权值,每条树边的权值为所有经过它的非树边权值的异或和。 那么剩下的图连通等价于两条边权值非$0$,且两条边的权值不等。 如果有$2$个奇点,那么两条边有公共点, 阅读全文
posted @ 2016-08-25 20:32 Claris 阅读(296) 评论(0) 推荐(0)
摘要: 对于$mode=0$的情况: 假设已经知道了最终要做哪些成就,那么这些成就一定是按$b$递减做的。 将成就按$b$从大到小排序,考虑往已选集合里新加一个成就。 假设该成就前面有$t$个已选成就,后面成就的$b$的和为$suf$,那么选该成就对答案的增量为$t\times b+a+suf$。 依次贪心 阅读全文
posted @ 2016-08-24 20:48 Claris 阅读(337) 评论(0) 推荐(0)
摘要: 考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出。 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥。 最后将答案除以每种糖果数量的阶乘,即可保证本质不同。 时间复杂度$O(n^2)$。 阅读全文
posted @ 2016-08-22 19:30 Claris 阅读(356) 评论(0) 推荐(0)
摘要: 首先将包含关系建树。 方法是将每个图形拆成上半边和下半边,从左往右扫描线,用Splay从下到上维护扫描线上所有图形。 每次加入一个新的图形$x$的时候,看看它下方第一个图形$y$,如果$y$是上半边,那么$x$的父亲就是$y$,否则是$y$的父亲。用同样的方法可以完成点定位。 然后每次相当于查询两点 阅读全文
posted @ 2016-08-21 22:53 Claris 阅读(497) 评论(1) 推荐(0)
摘要: 首先通过分数规划,二分答案$mid$,将每条边边权重置为$t-mid\times s$,用DP求出终点到该点的最短路,若非正则可以更小。 如此可以计算出每个出入口的最小危险值,然后把奇点放在$S$,偶点放在$T$,代价为危险值,对于每个空腔,在相应点之间连无穷边,求最小割即可。 阅读全文
posted @ 2016-08-21 03:21 Claris 阅读(338) 评论(0) 推荐(0)
摘要: A类数据: 将棋盘黑白染色,相邻的点之间连边,求出二分图最大匹配即可。 B类数据: 答案为$\lfloor\frac{n^2-1}{3}\rfloor$,用FFT加速计算即可,时间复杂度$O(L\log L)$。 C类数据: 轮廓线DP,对于轮廓线上每个格子,要么为空,要么被占据,要么被占据且还要向 阅读全文
posted @ 2016-08-21 01:48 Claris 阅读(465) 评论(0) 推荐(0)
摘要: 设$f[i][j][k]$表示从最后一行某个$H$走到$(i,j)$且在第$i$行只经过了$(i,j)$,途中经过了$k$次$F$的最小代价。 $A[i][j][k]$表示从下一行$\leq i$的某个$f[old][x][j]$且前$x-1$个有$k$个$F$的位置走过来的最小代价。 $B[i][ 阅读全文
posted @ 2016-08-20 17:38 Claris 阅读(287) 评论(0) 推荐(0)
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 38 下一页