因为我太懒了,因此就不每题开一篇写了。题目大意也懒得写了。html
显然最优策略是瞎走,在知道那条边断掉了以后才走最短路径。后端
先把以 \(T\) 为根的最短路树求出来,而后能够用堆求出断掉每条边后端点到 \(T\) 的最短路径。网络
最后像 dijk 那样 DP 一下就行了。优化
直接线段树 + 凸包优化 DP 能够轻松作到 \(O(n\log n)\)spa
用 这个方法 能够优化到 \(O(n)\)htm
不一样的环长只有 \(O(\sqrt n)\) 种。blog
对每种环长算一下答案便可。排序
直接缩个点而后每一个出度为 \(0\) 的连通块扔掉最小值便可。ci
用 这个东西,用平衡树维护序列便可。字符串
若是能够修改一个 \(a_i\) 知足 \(\forall i,a_{i+1}<a_i+b_i \or a_{i+1}>a_i+c_i\),那么那一我的第一天就会发现。
若是能够修改两个,那么那两我的次日都会发现。
如今就是要修改最少的 \(a_i\) 知足上面那个东西。
能够 DP。枚举上一个没有修改的 \(j\),那么要求 \([a_i-B_{i-1},a_i-C_{i-1}]\subseteq[a_j-B_{j-1},a_j-C_{j-1}]\)。其中 \(B,C\) 分别是 \(b,c\) 的前缀和。
能够发现区间长度是单调的。
而后按 \(a_i-B_{i-1}\) 排序求个 LIS 便可。
直接重链剖分而后在重链上二分是 \(O(n\log^2n)\) 的。
在重链上从下往上的求轻子树的答案。
当遇到一个轻子树答案为 \(0\) 时,这条链上面的答案就都是 \(0\) 了。
这样就只用二分下面那部分了。
复杂度应该是 \(O(n\log n)\) 的。
先二分答案 \(s\)。
弄一个网格,把 \(a_i+b_j\leq s\) 的部分染白,剩下的部分染黑。
那么就是你一开始在 \((1,1)\),每次找一个同行或同列的异色的点走过去。
若是 \((1,1)\) 在全部最大匹配上,那么先手必胜。
而后把最大匹配换成最大独立集。
把 \(a_i,b_j\) 排序后,选的必定是 \(i\leq R,j\leq C\)的白色部分和 \(i>R,j>C\) 的黑色部分。
能够发现,当 \(R\) 变大的时候,\(C\) 变大的收益是单调的,\(C\) 也是单调的。
直接扫一遍就行了。
先让每一个点能匹配 \(k\) 条边跑一边网络流。
而后每次把度数 \(=\) 度数最大值得点找出来,找一个覆盖这些点的匹配。
重复 \(k\) 次便可。
记 \(f_{i,j}\) 为长度为 \(i\),zjt 在 \(j\) 处的指望答案。
显然 \(f_{i,1}=f_{i,i}=i\)
设 \(f_{3,2},f_{4,2},\ldots,f_{m,2}\) 这 \(m-2\) 个未知数,每次能够经过 \(f_{i,j}\) 推出 \(f_{i+1,j+1}\) 的式子。
最后把 \(f_{m,2},f_{m,3},\ldots,f_{m,m-1}\) 这 \(m-1\) 个式子拿出来消元便可。
分块分类讨论或者树套树都能过。
对于每个 \(i\leq n\),新建一个点 \(i'\)。
连边 \((i,i')\)
对于每一组 \((i,j)\),连边 \((i',j)\)
答案为最大匹配 \(-n\)。
用一棵平衡树维护当前全部最优解以及最优解的答案
每次遇到一个新的 \(a_i\) 时,先把当前全部最优解的答案加上 \(a_i\) 的贡献。
还有一种状况,就是最优解到 \(a_i\) 时值为 \(a_i-1\)。
那就拿以前的最优解平移一下便可。
这样就能找到以前全部位置都作了最优操做的解(若是不是最优操做,就不会成为最大值)。
能够发现,最优解的 \(C\) 必定是 \(P-w_i-1\) 或 \(T\)。
把这些值拿出来每一个二分答案 DP 一下就是 \(O(n^2(-\log \epsilon))\) 的了。
这个作法的瓶颈在于二分答案。
可是咱们能够把这些 \(C\) 值 shuffle 一下,每次遇到一个 \(C\) 就 \(O(n)\) 判断答案是否大于上一个,大了再二分,这样就只用求 \(O(\log n)\) 次答案了。
复杂度是 \(O(n^2+n\log n(-\log \epsilon))\)
能够发现,\(f(a_1,a_2,\ldots,a_n)=2^{n-1}(a_1\or a_2\or\cdots\or a_n)\)
而后 \(n>2\) 的答案和 \(n=2\) 的答案是相同的。
而后人类智慧手玩一下就行了。
按颜色的出现次数分块分类讨论就行了。
答案确定是某一个 \(A_i\) 再乘上其余的 \(B_i\) 再加起来的形式。
枚举 \(A_i\),那么假设其余的 \(B_i\) 选了 \(k\) 个,那么贡献就是 \([x^k]\prod_{j\neq i}((1-B_i)+B_ix)\),对应的方案数就是 \(\frac{1}{k+1}\binom{n}{k+1}\)。
显然能够分制 NTT。
把这些加起来以后除以 \(n!\) 就是答案了。
枚举 \(i\),计算选的数都是 \(i\) 的倍数的答案。
设值域为 \(m\)。
先计算能够重复选的方案数。
弄一个阈值 \(S\),\(i\leq S\) 时直接 FWT,复杂度为 \(O(m\log m)\),\(i>S\) 时直接暴力 meet in the middle,复杂度为 \(O((\frac{m}{i})^2)\)
而后容斥一下就行了。
取 \(S=\sqrt{\frac{m}{\log m}}\) 时有最优复杂度 \(O(m\sqrt{m\log m})\)
考虑种了 \(i\) 棵不一样的树后没有结束的几率。设 \(x_i\) 为 第 \(i\) 棵树到下一棵的距离。随便钦定一棵树为第一棵。
结束了的状况数是 \(x_1+x_2+\cdots+x_k=n(1\leq x_i\leq 2)\) 的解数,为 \(\binom{i}{n-i}\)。
总的状况数显然是 \(x_1+x_2+\cdots+x_k=n(1\leq x_i\leq n)\) 的解数,为 \(\binom{n-1}{i-1}\)。
须要指望 \(\frac{n}{n-i}\) 步才能种下第 \(i+1\) 棵不一样的树。
因此答案就是 \(\sum_{i=0}^{n-1}\frac{n}{n-i}(1-\frac{\binom{i}{n-i}}{\binom{n-1}{i-1}})\)
考虑计算逃不出去的几率。
记 \(l=\frac{180^\circ}{360^\circ-\theta}\) 为半圆占可选区域的比例。
几率就是在一个长度为 \(1\) 的环上,随机选 \(n-1\) 个点,使得存在两个点之间的距离 \(>l\) 的几率。
那么能够钦定一个很小区域里面有至少一个点,右边 \(l\) 的部分没有点。
答案就是
\[ \begin{align} &1-\frac{1}{h}({(1-l)^{n-1}}-{(1-l-h)^{n-1}})\\ =&1-(\frac{\mathrm{d}}{\mathrm{d}x}x^{n-1})|_{1-l}\\ =&1-(n-1)(1-l)^{n-2}\\ =&1-(n-1)(\frac{180^\circ-\theta}{360^\circ-\theta})^{n-2} \end{align} \]
前几天刚刚作过一道基本上同样的题。
不写了。
假设不考虑拿完的影响,算出第一我的在每一个时刻的石子数 \(s_i\)。
记两我的的石子总和为 \(S=x+y\)。
对于一个区间,若是右半部分的 \(\max s_i-\min s_i\) 也就是极差 \(\geq S\),说明左半部分是没有用的,由于到右边仍是会取完。
不然能够轻松地根据左半部分的答案和右半部分的 \(\min,\max\) 计算出整个区间的答案。
每次暴力在线段树上跳便可。
直接状压 DP 便可。
先差分一下
那么每次就是选两个差为奇质数的位置,把这两个点的值都取反。
若是两个位置的差是奇质数,只用一次就能够把这两个位置处理掉。
若是两个位置的差是偶数,只用两次就能够把这两个位置处理掉。
剩下的状况只用三次就能够处理掉。
跑一个二分图最大匹配便可。
用一行的未知数表示剩下其余位置,而后高斯消元便可。
时间复杂度:\(O(m^3)\)
先按时间分值把删除去掉。
对于一个询问 \((x,y)\),把横坐标 \(\leq x\) 的点的凸包求出来,那么答案显然在凸包上。
暴力二分的复杂度是 \(O(n\log^2n)\) 的。
注意到这题只用求答案的最小值。
那么若是凸包最下面两个点连成的直线的斜率 \(\leq ans\),那么最下面那个点很明显是没用的。
这样不断删点就能够不用二分了。
复杂度是 \(O(n\log n)\)
考虑对每一个字符串分开计算答案。
那么就须要处理两个操做:
1.在这个字符串后面加上一个字符串
2.查询当前字符串在 \(S\) 中的出现次数。
把修改操做加上的字符串记做 \(T\)。
把 \(S\) 和 \(T\) 放在一块儿建 SA。
维护当前符合要求的字符串的 rk 范围,每次加字符串就在这个范围内二分便可。
复杂度是 \(O(n+q\log n)\)
不一样的线段树区间长度可能只有 \(O(\log n)\) 种
就你每一层的长度都是相邻两个整数,而后下一层的也是。
能够列出DP方程:
\[ f_i=\sum_{j=l}^i[b_{j-1}=0]f_{j-1}(i-j+1)^2\\ =\sum_{j=l-1}^{r-1}[b_{j}=0]f_{j}(i-j)^2\\ =\sum_{j=l-1}^{r-1}[b_{j}=0]f_{j}(i^2-2ij+j^2)\\ \]
分开维护
\[ S2=\sum_j (i-j)^2f_j\\ S1=\sum_j (i-j)f_j\\ S0=\sum f_j \]
而后每次转移的时候
\[ S2'=S2+2S1+S0+S2\\ S1'=S1+S0+S2\\ S0'=S0+S2 \]
这样就行了。
而后这些矩阵都是能够求逆。
预处理一下就行了
\[ \sum_{i=1}^n\sum_{j=1}^n\varphi(ij)dist(i,j)\\ =\sum_d\frac{\lvert\mu(i)\rvert}{\varphi(i)}\sum_{d\mid i,d\mid j}\varphi(i)\varphi(j)dist(i,j) \]