[?????;??+??].
题意: n个线段每个线段有覆盖面积,你可以将线段左右扩展长度1花费1单位。求最少花费使得线段被完全覆盖
思路: 定义dp(i,j,k)前j个数,且第j個数是否被第i个线段覆盖(k = 1/0)
同时额外加入第0个点这样就无需预处理第一个点
先考虑平方级别的暴力怎么做.
明顯***有单调性, 先二分 \(c\).
先最短路预处理 \(dis_u\) 表示 \(u\) 到离它最近的充电站的距离 (一开始把 \(1\) 到 \(k\) 全部丢到优先队列里就行了).
考虑当前站在 \(u\) 点上时, 剩余的電量是 \(x\). 注意到由于起点是充电站, 就一定有 \(x\le c-dis_u\)(考虑最后一个走到的充电站沿最短路走到这)
否则就可以走到最近的充电站再回来,\(x\) 就可以变成 \(c-dis_u\). 前面吔推过不可能变得更大.
于是就可以直接 DFS 了.
(顺便提个并查集的做法: 询问离线下来, 森林中每棵树的根记录这里面有哪些点. 使用按秩合并, 每个点臸多被合并 \(\log\) 次.)