专栏文章

P6573 [BalticOI 2017] Toll 题解

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mioseaz5
此快照首次捕获于
2025/12/03 00:22
3 个月前
此快照最后确认于
2025/12/03 00:22
3 个月前
查看原文

最短路矩阵

注意到题目中有 bk=1+ak\left\lfloor\dfrac{b}{k}\right\rfloor=1+\left\lfloor\dfrac{a}{k}\right\rfloor 这个性质。
不难发现这个图可以每 kk 个点分一层,每层只有连向下一层的边。
可以发现每一层到下一层的最短路构成了一个 k×kk\times k 的矩阵。
设第 ii 层到 i+1i+1 层的最短路矩阵为 AA,设第 i+1i+1 层到 i+2i+2 层的最短路矩阵为 BB

矩阵计算

那么从设第 ii 层到 i+2i+2 层的最短路矩阵 CC 可以用 Ci,j=minx=1kAi,x+Bx,jC_{i,j}=\min\limits_{x=1}^k A_{i,x}+B_{x,j} 求出。
这是一个 [+,min][+,\min] 矩阵,满足交换律和结合律。
构造完矩阵后,答案就是第 ak\left\lfloor\dfrac{a}{k}\right\rfloor 层到第 bk\left\lfloor\dfrac{b}{k}\right\rfloor 层最短路矩阵 MM 中的 Mamodk,bmodkM_{a\bmod k,b\bmod k}

计算矩阵

接下来就是如何计算第 ak\left\lfloor\dfrac{a}{k}\right\rfloor 层到第 bk\left\lfloor\dfrac{b}{k}\right\rfloor 层最短路矩阵 MM
观察到可以把 akbk\left\lfloor\dfrac{a}{k}\right\rfloor\sim \left\lfloor\dfrac{b}{k}\right\rfloor 拆成很多段,这样可以用倍增的思想解决。
fi,jf_{i,j} 为第 ii 层到 i+2ji+2^j 层的最短路矩阵,转移直接用 fi,j=fi,j1×fi+2j1,j1f_{i,j}=f_{i,j-1}\times f_{i+2^{j-1},j-1}
akbk\left\lfloor\dfrac{a}{k}\right\rfloor\sim \left\lfloor\dfrac{b}{k}\right\rfloor 进行二进制拆分,就可以解决。

细节问题

数据中有 ak=bk\left\lfloor\dfrac{a}{k}\right\rfloor=\left\lfloor\dfrac{b}{k}\right\rfloor 的数据,需要特判。
这题的空间只有 128MB,如果 MLE 可以尝试把数组开小。

评论

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

正在加载评论...