我是靠谱客的博主 忧郁玫瑰,最近开发中收集的这篇文章主要介绍题解 Luogu P1144.最短路计数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

欢迎访问 My Luogu Space。


【题目大意】

有一张无向无全图,求从1号节点出发到每一个节点的最短路有几条。可能会有重边和自环。


【题解】

由于没有边权,直接用 bfs 从1号节点开始遍历所有的点。并且记 cnt[i] 表示从1号节点到 i 号节点的路径条数,每次 cnt[e[i]]+=cnt[x] 进行统计。


【代码】

// output format !!!
// long long !!!
#include <bits/stdc++.h>
using namespace std;
const int MN = 100000+10;
const int MOD =  100003;

int n, m, cnt[MN], f[MN], dis[MN];
int hed[MN], nex[MN*4], e[MN*4], ct;

int main(){
	scanf("%d%d", &n, &m);
	for(int i=1; i<=m; ++i){
		int a, b; scanf("%d%d", &a, &b);
		e[++ct] = b, nex[ct] = hed[a], hed[a] = ct;
		e[++ct] = a, nex[ct] = hed[b], hed[b] = ct;
	}
	queue<int> Q; Q.push(1);
	cnt[1] = f[1] = 1;
	while(!Q.empty()){
		int x = Q.front(); Q.pop();
		for(int i=hed[x]; i; i=nex[i]){
			if(!f[e[i]]){
				f[e[i]] = 1;
				dis[e[i]] = dis[x]+1;
				Q.push(e[i]);
			}
			if(dis[e[i]]==dis[x]+1)
				cnt[e[i]] = (cnt[e[i]]+cnt[x])%MOD;
		}
	}
	for(int i=1; i<=n; ++i)
		printf("%dn", cnt[i]);
	return 0;
}

最后

以上就是忧郁玫瑰为你收集整理的题解 Luogu P1144.最短路计数的全部内容,希望文章能够帮你解决题解 Luogu P1144.最短路计数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部