luogu - 1967 货车运输
题目大意
有$n$个城市,$m$条双向道路,每一条道路有限重,现在有$q$辆货车分别向$u_{i}$城市送货到$v_{i}$城市,问你在不超过限重的情况下每辆车能运送货物的最大重量是多少
其中$1 \leq n < 10^{4}$,$1 \leq m < 5 \times 10^{4}$,$1 \leq q < 3 \times 10^{4}$
解题思路
首先很容易想到暴力的$Floyd$,转移方程也非常容易想到,即:
但是该算法时间复杂度$O(n^3)$,空间复杂度$O(n^2)$,显然不能满足要求,考虑优化。
模拟发现,如果$u_{i}$到$v_{i}$有多条道路,那么我们肯定会选择限重最大的那条路,并且不会去走边权小的道路,于是我们可以处理图中的最大生成树,这样就可以保证任意两个节点间的路径为最大。
其次,由于树上的任意两节点路径唯一,我们可以使用$LCA$来求得任意两节点间的路径。
总时间复杂度$O(mlog_{2}^{m}+(n + q)log_{2}^{n})$,空间复杂度$O(m+nlog_{2}^{n})$
AC代码
1 |
|