题目链接:
https://www.luogu.org/problemnew/show/P2176
思路:
1:要使1到n的最短路径的值变大,那么增长的边一定在原来的最短路径上
2:枚举原来最短路径上的每一条边,使其长度加倍,跑spfa()函数,记录最大的最短路径
3:最后输出与原来最短路径的差即可
算法:
1:spfa算法
2:实现基础bfs
注意:
1:每一次调用spfa()函数都要调用init()初始化,一开始要用f记录下n,因为在求最短路径经过的节点时n的值发生了改变
2:每一次改变最短路径上一条边的值,去调用spfa()函数之后,下一次改变边之前,一定要把上一次改变的边变为原长
int qian=sta.top();
sta.pop();
int hou;
while(!sta.empty())
{
hou=sta.top();
sta.pop();
for(int i=0;i<e[qian].size();i++)
if(e[qian][i][0]==hou)
e[qian][i][1]*=2;
for(int i=0;i<e[hou].size();i++)
if(e[hou][i][0]=&