「SNOI2019」通信 分治优化费用流建图
题意: n 个排成一列的哨站要进行通信。第 i 个哨站的频段为 a i 。 每个哨站 i i 需要选择以下二者之一: 1.直接连接到控制中心,代价为 W ; 2.连接到前面的某个哨站 j (j<i),代价为 |ai−aj|。 每个哨站只能被后面的至多一个哨站连接。 请你求出最小可能的代价和。 题解: 显然的费用流 然后我耿直的n^2建边,觉得我的费用流很快,应该可以过 然后返回了TLE 然后google了一下题解:发现这题卡了n^2建图,需要优化建边 我这里是通过分治优化的 就是类似与建立一个虚点 一个x要向y的一个前缀建图,所以就可以类似前缀和优化建图那样, 按权值排序然后建出一条链,链上两个点之间的流量为INF,费用为权值之差,然后每个点向对应的点连边 但这样建图是错误的,原因在于我们把点排了序,改变了编号顺序, 所以一个点能到达的点不一定是它可以到达的 所以我们要固定在固定编号顺序的情况下这样连边,也就是说x的一个区间和y的一个区间之间这样连边, 要求两个区间不重合,且x的区间比y的区间小 那么很容易想到分治建图,每次让[l,mid]向[mid+1,r]连边,剩下的递归下去就行了 1 #include <set> 2 #include <map> 3 #include <stack> 4 #include <queue> 5 #include <cmath> 6