理解题意
进过简单的分析,我们可以得出,题目想让我们求最小的最大值。
首先,我们就直接想到了枚举,枚举在每一条边上建一个虫洞(也就是将这个边的边权变成0)枚举每个运输任务需要的时间(LCA实现)。最后求出所有航道中最大的值,当我们枚举完每条航道的时候,我们就可以直接得出答案。
对于不熟悉LCA的同学们给出LCA模板:
int lca(int u, int v)
{
if (depth[u] < depth[v])
swap(u, v);
for (int i = LOG - 1; i >= 0; i--)
{
if (depth[st[u][i]] >= depth[v])
{
u = st[u][i];
}
}
if (u == v)
return u;
for (int i = LOG - 1; i >= 0; i--)
{
if (st[u][i] != st[v][i])
{
u = st[u][i];
v = st[v][i];
}
}
return st[u][0];
}
其中 depth 表示深度。
but,我们小小的计算一下,我们就可以发现,这个枚举算法的时间复杂度高达:O(n^2),这种时间复杂度只能过8-10个点(40-50分)显然不是正解。(所以,正解是什么呢)
正解的思路是使用
没错,就是使用二分枚举。(虽然我不知道二分枚举是什么)
代码
没写呢,自己写去