C++ P1144 最短路计数

这篇博客讨论了P1144最短路计数问题,通过C++实现SPFA算法求解,并强调了在解决过程中要注意重边的影响。
摘要由CSDN通过智能技术生成

题目:P1144 最短路计数

他们居然说是水题,看来我还是太low了。

用spfa求最短路,然后记录有多少个相同的到该点的最短路。

你忽略了重边了吗?

# include <iostream>
# include <vector>
# include <queue>
using namespace std;
const int maxn = 0x7fffffff / 3;
int n, m, dis[1000010], ans[1000010], u, v; // dis记录1到其它点的最短路, ans保存最短路个数
vector<int> map[1000010];
bool vis[1000010];
queue<int> s;
void spfa(int root) {
	for(int i = 1; i <= n; i++) dis[i] = maxn; // 到每个点最短路距离为无穷大
	s.push(root); vis[root] = true; // 入队,访问
	ans[root] = 1; dis[root] = 0; // ans到本身为1个最短路, dis到本身最短路为0
	while(!s.empty()) { // 队列不空就要继续
		u = s.front(); s.pop(); // 取出队列,出队
		for(int i = 0; i < map[u].size(); i++) { // 枚举u的每一条边
			v = map[u][i];
			if(dis[v] >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值