这是我这个专题做出来的第一道题,跟榜看到的B,读完题,惊了惊了!似李!货车运输!当时也不说忙着抢一血,反正就是把自己写过的代码直接粘来改改交了过了。
但这样做的意义仅仅是多一个过题数而已,还是得好好整理一下。
分析完题意后,我们知道我们需要一个最大生成树保证带宽尽可能大(因为我们不会去选择更低带宽的路),然后在一条路上找到带宽最小值。就可以搜图并记录边权最小值即可。但是这么暴力去搜基本上是必T的。我们就需要运用倍增lca来解决问题。
什么是倍增?个人理解这是一种预处理的方式,通过处理(一般以2为底数),得到区间部分的状态,在全图运作时不用每个单位每个单位计算。
比如在一张图上走7格,一步一步走需要7次运算,而如果通过这样的预处理,提前知道了22 ,21 ,20 的状态,那么只用3步就可以累加完成(4 + 2 + 1)。数字越大优化效果越明显。
那我们就来预处理吧:
FOR(i, 1, 20)
FOR(j, 1, n)
{
f[j][i] = f[f[j][i-1]][i-1]; //递推
w[j][i] = min(w[j][i-1], w[f[j][i-1]][i-1]);
}
在dfs的过程中已经有f[to][0] = now
即上一节点(