hdu2433 Travel bfs+最短路树 (预处理)

该博客主要探讨了HDU2433 Travel问题的解决方法,强调在每条边长度为1的情况下,正确答案应基于最短路树的求和。作者指出,尽管SPFA和Dijkstra的代码可以得到AC,但它们可能不准确。正确解法是使用BFS预处理每点到其余点的最短路径和,同时记录前驱节点,以便于判断删除的边是否影响最短路树。对于重复边或不在最短路树上的边,删除操作不会改变答案。
摘要由CSDN通过智能技术生成

给你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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值