题意:给你n(n = 1000)个二维点,第一个点是power plant,还有n - 1个点是dormitories。然后现在知道有一条寝室到寝室的边是不能连的,但是我们不知道是哪条边,问这种情况下,最小生成树的最大值。
思路:有一种很朴素的算法就是枚举每一条被删除的边,然后做最小生成树,复杂度高的突破天际,显然不可以。
但是既然想到了上面的那种做法,再想一下就可以得到,我们还是枚举每一条被删除的边,只是这些边都是树边,所以关键就在于,删除这条边之后的图的最小生成树和原来的最小生成树的关系。
我们可以先预处理出来MINE[i][j], 表示点i 到点j 的最短的一条边。然后再预处理出来NMIN[i][j], 表示去掉边i -> j 之后,i -> j的最短边。
那么去掉一条边的增量就是NMIN[i][j] - MINE[i][j] 。然后取最大值即可。
#include
#include