专栏文章

题解:P7417 [USACO21FEB] Minimizing Edges P

P7417题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqfez34
此快照首次捕获于
2025/12/04 03:55
3 个月前
此快照最后确认于
2025/12/04 03:55
3 个月前
查看原文
首先发现 f(x)f(x) 的信息相当于奇偶最短路,如果只有纯的最短路我们是好做的,把最短路画在数轴上,每个点随便在上一层选一个父亲即可。
两维的,用类似的方法我们画在平面上,令奇偶最短路分别是 x,yx,y,则我们画在 (min(x,y),max(x,y))(\min(x,y),\max(x,y)) 上。
由于奇偶性,这个图中只有斜对角存在邻居,而上下左右没有。
按照平面直角坐标系的上下左右来论,一个点要么从左下角转移过来,要么某一维从左上转移,某一维从右下转移。
考虑从左下往右上扫描线,每次把一层点与开头联通,观察一个连通块,两个端点必定可以使用一类边(否则该图无法构造出来),于是变成了一个序列问题:aia_i 表示该位置有多少点,bib_i 表示该位置能否使用一类边,我们把每个 ai1a_i\ge 1 的连续段拉出来单独处理。
考虑所有 bi=0b_i=0 的空腔,这里面的每个点都必须要连向两侧,所以贡献是 al+ar+i=lr1max(ai,ai+1)a_l+a_r+\sum_{i=l}^{r-1}\max(a_i,a_{i+1})
解决了这些点后,有一些点已经被自动解决了(例如 b:[1,0,0,1,0,0,1]b:[1,0,0,1,0,0,1],中间的那个位置有一部分点就被解决了),而剩下的点要解决它们至少需要 11 的代价,而我们刚好可以用 11 的代价(直接使用一类边),所以代价是方便计算的。
这个分析是错误的,错在“至少需要 11 的代价”,事实上对于一个 01111100111110(假设有 xx11)的连续段,在处理完 00 后,我们有 mina\min a 次机会,花费 x1x-1 拯救 xx 个点。
注意序列的最右端不太一样,一个点的右下角可以不在 xyx\le y 的图上,例如 (a,a+1)(a,a+1) 可以与自己相互转移,所以如果使用二类边,向右下的边只需要 num2\lceil\frac{ num}{2}\rceil 条边即可,一类边仍然需要 numnum 条。
不过 1.5>11.5>1,最右边的边界情况只能说明,有现成的左边界能用那我们就用,用不了我们就还是用一类边。
所以我们从左往右扫描,传递二类边即可,最后剩下的点用一类边补齐。
一个很重要的误区是:11 号点必定在第一层(这是因为 1disp(x)1\to dis_p(x)dis¬p(x)1dis_{\neg p}(x)\to 1 的道路是对偶的),但第一层点并不一定只有一个,满足 x=0x=0 的点只有一号点,它只需要转移 yy 而无需转移 xx,其他点仍需要从两边转移过来。
(如果第一层点只有一个的话,那之后的每层都只能有一个了。)

评论

0 条评论,欢迎与作者交流。

正在加载评论...