最短路计数

最短路计数

提交数: 51, 通过率: 54.9%, 平均分: 65.49

题目描述:

给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条?

输入格式:

第一行包含2个正整数N, M, 分别为图的顶点数与边数。

接下来M行,每行两个正整数x, y,表示有一条从顶点x连向点y的边。请注意可能有自环与重边。

输出格式:

共N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于结果的值有可能会很大,你只需要输出结果 mod 100003即可。如果无法到达顶点i,则输出0。

数据范围:

对于20%的数据,N<=100。

对于60%的数据,N<=1000。

对于100%的数据,N<=100,000, M<=200,000。

样例输入:
复制代码
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
样例输出:
复制代码
1
1
1
2
4
提示:

样例解释:

1到5的最短路有4条,分别为2条1-2-4-5和2条1-3-4-5 ( 由于4-5的边有2条)。

此题使用SPFA(Shortest Path Faster Algorithm)

#include <bits/stdc++.h>

using namespace std;

int n,m,f1000005,t4000005,n14000005,g,dis1000005,ans1000005;

bool book1000005;

queue<int> que;

void SPFA(int u,int v) {

tg=v,n1g=fu,fu=g++;

}

int dfs(int u) {

if(ansu)return ansu;//如果ansu!=0直接输出,否则更新并输出

for(int i=fu; i!=-1; i=n1i)

if(disu-1==dist\[i])ansu=(ansu+dfs(ti))%100003;//统计最短路的条数并更新

return ansu;

}

int main() {

scanf("%d%d",&n,&m);

for(int i=1; i<=n; i++)fi=-1,disi=INT_MAX;//将数组初始化

for(int i=1,u,v; i<=m; i++)scanf("%d%d",&u,&v),SPFA(u,v),SPFA(v,u);//输入之后构建邻接矩阵

dis1=0,que.push(1),book1=1;

while(!que.empty()) {//循环寻找最短路

int f1=que.front();//更新出发点

que.pop(),bookf1=0;//删除已遍历的元素

for(int i=ff1; i!=-1; i=n1i)//遍历出发的边

if(disf1+1<dist\[i]) {//如果比之前的最短路短

dist\[i]=disf1+1;//更新最短路

if(!bookt\[i])que.push(ti),bookt\[i]=1;//标记已遍历过的节点和边

}

}

ans1=1;

for(int i=1; i<=n; i++)printf("%d\n",dfs(i));//输出最短路的个数

return 0;

}

相关推荐
qeen8714 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
lucas_AI14 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
冻柠檬飞冰走茶15 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
民乐团扒谱机15 小时前
【微实验】倒谱算法(Cepstrum)深度解析:原理、数学推导与代码实现
人工智能·算法·语音识别
Nil20816 小时前
leetcode 189轮转数组
数据结构·算法·leetcode
-dzk-16 小时前
【动态规划】LC 118.杨辉三角
算法·动态规划
恣逍信点16 小时前
《凌微经》静态自悖——变化之自因
人工智能·科技·算法·机器学习·业界资讯·拓扑学·哲学
吃着火锅x唱着歌16 小时前
LeetCode 3885.设计事件管理器
算法·leetcode·职场和发展
土司大王17 小时前
LeetCode hto100——字母异位词分组
java·算法·leetcode
Eloudy17 小时前
预词力:LLM 的唯一形式化能力
人工智能·算法·agent