咕了大半年了。
1 预备知识
给定正整数 (p),一张点集为 (V={v_1,cdots,v_n})、边集为 (E)((|E|=m))的有向无环图 (G),代价函数 ((y,w))((forall i,w_i>0))。
求实数序列 (f),使得 (forall G) 中有 (v_i) 到 (v_j) 的有向路径,(f_ile f_j) 的情况下,最小化回归代价:
定义将序列 (z) 中 (<a) 的元素变为 (a),(>b) 的元素变为 (b) 称为序列 (z) 向集合 (S={a,b}) 取整。
定义点集 (U) 的 (L_p) 均值为 (y_i=k) 的情况下使点集 (U) 的回归代价最小的 (k)。
2 特殊情形
考虑 (G) 是链,(p=2) 的情况。
引理 1 点集 (U) 的 (L_p) 均值是 (y_i) 关于 (w_i) 的加权平均数。
引理 2 若 (y_i>y_{i+1}),则 (f_i=f_{i+1})。
单调栈维护,因为太经典所以不写了。
考虑 (G) 是树,(p=1) 的情况。
线段树合并维护折线 dp,因为不会所以不写了。
3 一般情形
考虑新的 (S={a,b}) 问题:在满足原问题限制的情况下要求 (ale f_ile b),最小化回归代价。
3.1 (p=1) 的情况
引理 3 在 (L_1) 问题中,若 (forall i,y_i otin(a,b)),(exist) 最优解序列 (z) 满足 (forall i,z_i otin(a,b)),(z^S) 是 (S) 问题的一组最优解,则 (exist z) 是原问题最优解,且 (z) 向 (S) 取整得到 (z^S)。
然后就可以二分了,(S) 取 (y_i) 中相邻值的时候此即为最小权闭合子图问题。
3.2 (1<p<infty) 的情况
实际上就是离散 -> 连续了,变成实数二分,原来的差值要改成导数。
3.3 (p=infty) 的情况
其实是 sb 题,二分之后就是每个 (f_i) 知道了取值范围,直接 DAG 上 dp 即可。
3.4 一些 nb 的扩展
考虑 (G) 是链,对每个前缀都求答案。
看不懂,咕了。
4 特殊情形
考虑 (G) 是满点集二维偏序的情况。
同样的二分方法,然后发现这个可以 dp 做。
考虑 (G) 是任意 (n) 个点二维偏序的情况。
同样的二分+dp 方法,只是不能只考虑相邻两行之间的影响了。
因为要求方案所以有点毒瘤,咕了。
5 一些应用
给定 (n) 个点 (m) 条边的无向连通图和两个边集 (E_1,E_2),每条边有权值 (d_i),每次操作将一条边的权值 (+1) 或 (-1),求最少通过多少次操作使得:
- (E_1) 的生成子图是最小生成树。
- (E_2) 的生成子图是最大生成树。
(nle 50),(mle 1000)。
可以对 (m) 条边建立偏序关系(非树边 (ge) 对应环上的树边),然后就是保序回归问题。
还有去年省选 D1T3,就是把图拟阵换成了线性拟阵,(根据这里的引理 5.6)也有对应的结论:(A) 是权值最大的基当且仅当 (forall uin A,vin Sackslash A),若 ((Aackslash{u})cup{v}inmathcal I),则 (w(u)ge w(v))。(B) 同理。