给你n个点,m条双向边,每条边的长度都为1,求删去第i条边 后, 每个点到其他点的最短路的距离之和.
//题意很不清晰
网上有最短路spfa 和djskra 的做法, 而且代码可以ac, 但是代码是错的,只是刚好卡着时间过了
由于每条边的长度都一样, 而且根据答案我们可以得出, 每一个点到其他点的距离之和 应该是一棵树,所以我们要求n棵最短路树的和,所以先预处理记录每个点为原点的最短路树之和, 所以正解应该是bfs + 最短路树
做法:
先对每一个点都进行一次bfs, 计算出每个点到其他点的距离之和, 如果无法bfs到所有的点说明不连通,那么可以直接打印INF;
在预处理时, 我们可以先做一个操作,在bfs的时候,对每一个点以某个点为原点进行bfs时候的前驱进行记录,方便 我们后面 进行判断要删除的边是否在 我们之前bfs过的最短路树上,
题目还会出现重边的情况, 那么如果删除的边是 重边的话,那么其实答案不会发生变化, 不用进行处理, 要删去的边如果没在最短路树上的话 也不用进行处理,答案没有变化。
/*
Algorithm:
Author: anthony1314
Creat Time:
Time Complexity:
*/
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<cstring>
#include<