别忘了无向图边开2e5*2
题意:给一个无向图,有n个点和m个边,其中包含k个特殊的点。现在让任意两个特殊的点中间连线,求1到n的最大的最短路是多少。
思路:定义两个数组d1,d2分别储存从1和从n到各各点储存的最短路长度。
1.如果连接的两个点之间连线不影响结果ans,则ans为d1[n]
2.如果这两个点影响,设这两个点分别为a,b。ans = min(d1[a]+d2[b]+1,d2[a]+d1[b]+1)
则问题转化为
给两个长度为n的数组a,b。
如何在O(n)的复杂度求出i和j(i!=j)
使得min(ai+bj,aj+bi)最大。
假若让ai+bj
可以领两个数组根据ai-bi进行排序,遍历1-n,当遍历到posj的时候,最优解posi为【1-posj-1】的最大a的下标,随便维护一下即可。
#include
#include
#include
#include
#include <string>
#include