2023.7 做题记录
7.2
ABC308Ex Make Q
标签:图论,最短路,最小环
来源:ABC308
突然发现无向图最小环这个东西不会做,补习一波。
无向图最小环就是在非负边权的无向图上求一个不重复经过边、除了首尾不重复经过节点的边权和最小的环。
这个东西可以参考OIWIKI,根据数据规模可以选择不同的解法。
在这个题中这个东西还需要拓展一下,对于任意点求出包含这个点的最小环,最小环定义和上述相同。
这里需要引入一个东西叫最短路径树,简而言之就是确定源点后,以源点为根构造一棵树,使得根到每个点的路径等于在原图上源点到这个点的最短路,这个是容易用dij构造的,不过大部分情况只需要求出来最小环的大小,所以只需要暴力dij处理出的最短路数组,不需要真的构造出这棵树。
回到本题,首先有一个简单的暴力是枚举每条边,钦定这条边是 'Q' 的尾巴,那么剩下的问题就是去掉这个边的其中一个端点,求剩下的图中包含另一个端点的最小环,根据上述算法单次可以做到 \(O(n^2+mlogn)\)(有人说可以做到 \(O(n^2)\),不太懂,但是如果 \(m\) 和 \(n^2\) 同阶了此时 \(logn\) 的影响大概不会太大),那么这个暴力的复杂度是 \(O(m(n^2+mlogn))\),也就是 \(O(n^4logn)\) 左右。
一种思路是改变枚举边为枚举点,这样做比较麻烦;另一种思路是仍然枚举边,求最小环目前这是最优复杂度了,那么就需要试着减少枚举量。
正难则反,考虑如果求出来包含某个点 \(x\) 的最小环,那么能选的尾巴是固定的,也就是 \(x\) 连出来的边中不在环上的边权最小的边。
思考一下这条边一共有多少种可能性,不难发现只有三种,并且是权值最小的三种,因为不可能这三条边同时出现在环上。
所以只需要枚举 \(3n\) 条边来求最小环即可,复杂度就变成了 \(O(n(n^2+mlogn))\),也就是 \(O(n^3logn)\),时限非常大,可以通过。