都是这辈子都用不到的算法,就当颓废了(
线性规划与网络流的转化
设 \((u,v,c_{uv},w_{uv})\) 表示流量上界,代价。
\(b_u\) 表示流量需求,即流出减流入至多是 \(b_u\) (相当于连源点 or 汇点)
费用流得到的结果是:(所以如果问题答案是后面的 min 形式就能做)
ZJOI2013 防守战线:
照着连边就行了。
AGC 043 F :
装盒一定是重量从小到大。将同一家店的珠宝按重量排序,设 \(X_{i,j}(0\le j\le K_i)\) 表示前 \(j\) 个重量取这么多个。
\(X_{i,0}\) 是无限制的点,可以看做:连向 \(X_{i,0}\) 的是连向 \(T\),\(X_{i,0}\) 连出的是 \(S\) 连出。跑最小费用流。
发现答案式子是 \(\min(A\times flow - C)\) ,\(C\) 是 \(A\) 为 0 的费用。
那么和 CF1307G 一样搞二分斜率就好了。
BEST 定理
欧拉回路数量,没有起点:
\(T_x\) 表示 x 为根的树形图数量。(就是原图的生成树数量)
[UR#15]B
析合树
这篇博客越来越阴间了...
CF1205F
全局平衡二叉树
以前学过的东西了。。大体思路是,把每一条重链建成一颗二叉树(相当于把 LCT splay形态固定下来),然后暴力跳 fa。
保序回归
(建议看论文。)
点集 \(U\) 的 \(L_p\) 均值 为 满足 \(\sum_{i\in U} w_i|y_i-k|\) 最小的 \(k\) (让一个集合取的值一样,代价最小。)
求解一条链的保序回归问题可以贪心。
如果 \(y_i > y_{i+1}\) 那么一定有 \(f_i = f_{i+1}\) ,贪心维护栈,不断合并相同值的段即可。
整体二分的求解做法
考虑一个新问题:假设要求 \(f_i\in[L,R]\)。固定 \(L,R\) ,每个点必须取 mid 或者取 mid+1,最小化代价。
通过这个问题的最优解,把取 \(mid\) 的递归进 \([L,mid]\) ,取 \(mid+1\) 的递归进 \([mid,R]\) 继续求解。
怎么解这个问题呢,相当于 有要求 \(f_i < f_j\) 时,\(f_i\) 取 \(mid+1\),\(f_j\) 就不能取 \(mid\),可以转为最大权闭合子图问题。
d1t3 魔法商店
猜个不会证的结论
把 \(A\) 中的某个元素换成另一个,如果还满足,权值就要满足一个大小关系。\(B\) 也同理。于是就变成了保序回归。
[HNOI2019] 序列
是第一种贪心做法的例题了。
L2 问题的话,均值要取:\(\dfrac{\sum w_iy_i}{\sum w_i}\) (加权平均数)
处理出左边和右边的单调栈。
最后肯定是:修改的 \(x\) 与某段 \([L_0 ,R_0]\) 划成一段。
如果知道 \(R_0\) 那么可以在左边的单调栈里二分 \(L_0\) 。
把 \(R_0\) 套在外面二分,就可以了,两 log。
单调栈可以预处理出来然后回退。
数论函数相关
【ULR #1】校验码
多项式相关
咕咕咕。不想学多项式
单纯型法
线性代数
CF1540E
设转移矩阵: \(A_{i,j} = j[j=i,j\in S_i]\)
设 \(e_i\) 为只有第 \(i\) 项为 \(1\) 的列向量。
想要求: \(\sum_{k\ge d_i} A^{k-d_i}e_ia_i\) ?
A 有 \(n\) 个特征值,为 \(1\sim n\),设特征向量为 \(v_i\),(根据定义),\(Av_i = iv_i\) 。
设能构造矩阵 \(c_{i,j}\) 满足 \(e_i = \sum c_{i,j}v_j\) (可以矩阵求逆得到)
答案式子变成:
(我们利用了特征值把一整个转移矩阵搞没了,变成了数,于是就好处理了。)
由于查询是 \([l,r]\) :可以预处理每个 \(v_j\) 的前缀和,能得到 \(v_{j,[l,r]}\)。
维护 \(s_j = \sum a_i c_{i,j} j^{-d_i}\) ,由于要 \(k\ge d_i\) 才能统计进来,所以要开 \(n\) 个树状数组维护一下。
[ULR #2] 跳蚤猜密码
设 \(e_{i,j}\) 为单位元。
使用 \(n^2+1\) 次询问:\(\det (A+e_{i,j}) = \det A + M_{i,j}\) ,\(M_{i,j}\) 为 \((i,j)\) 位置的代数余子式(去掉 \(i\) 行 \(j\) 列的 det \(\times (-1)^{i+j}\))
伴随矩阵:\(A^{*} = \frac{1}{\det A}A^{-1}\),有定理:\((A^{*})_{i,j} = M_{j,i}\) 。于是可以求出 \(A^{-1}\) 。
如何卡掉一次询问:
不问 \(M_{1,1}\) 。
\(\det(A^{*}) = (\det A)^{n-1}\),\(M_{1,1}\) 不为 0 时可以在 \((1,1)\) 处填入 \(0,1\) 求 det 来解出 \(M_{1,1}\)。
CF736D
基本就是套上面伴随矩阵的知识就能解决了...
一些奇怪的随机题
[ ]
杨表
咕咕咕