【算法】最短路计数(计算最短路的数量)

news2025/1/11 8:56:54

题目 

        给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1 到 N。

        问从顶点 1 开始,到其他每个点的最短路有几条。

输入格式

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

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

输出格式

        输出 N 行,每行一个非负整数,第 i 行输出从顶点 1 到顶点 i 有多少条不同的最短路,由于答案有可能会很大,你只需要输出对 100003 取模后的结果即可。

        如果无法到达顶点 i 则输出 0。

数据范围

1≤ N ≤ 10^5
1 ≤ M ≤ 2×105

思路

由于该图为无向无权图,因此最短路为经过点最少的路径。 

样例:
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5

 根据样例,我们得到下面这张图。

         dist[]数组储存走到当前点,最少经过的点数。

        1、如果在bfs过程中,后面的点 i 比他的前驱 j 的点数+1还要大,则说明当前dist[i]中储存的不是当前点 i 所经过的最小点数。更新点 i ,dist[ i ] = dist[ j ] + 1; cnt[ i ] = cnt[ j ]。

        2、如果在bfs过程中,后面的点 i 与他的前驱 j 的点数+1相等,则说明从点 j 到达点 i 也是最短路。更新点 i , cnt[ i ] = cnt[ j ] + cnt[ i ]。(注意取模)

        3、如果在bfs过程中,后面的点 i 比他的前驱 j 的点数+1要小,则不进行任何操作。

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10,M = 4e5 + 10,MOD = 100003;
int n,m;
int h[N],e[M],ne[M],idx;
int dist[N],cnt[N];// cnt中储存最短路的个数
queue<int> q;

void add(int a,int b)
{
    e[idx] = b,ne[idx] = h[a],h[a] = idx ++;
}

void bfs()
{
    memset(dist,0x3f,sizeof(dist));
    dist[1] = 0;
    cnt[1] = 1;
    q.push(1);
    while(q.size())
    {
        int t = q.front();
        q.pop();
        for(int i = h[t]; ~i ; i = ne[i])
        {
            int j = e[i];
            if(dist[j] > dist[t] + 1)
            {
                dist[j] = dist[t] + 1;
                cnt[j] = cnt[t];
                q.push(j);
            }
            else if(dist[j] == dist[t] + 1)
            {
                cnt[j] = (cnt[j] + cnt[t]) % MOD;
            }
        }
    }
}

int main()
{
    memset(h,-1,sizeof(h));
    cin >> n >> m;
    int a,b;
    while(m --)
    {
        scanf("%d%d",&a,&b);
        add(a,b);
        add(b,a);
    }
    bfs();
    for(int i = 1; i <= n; i ++)
    {
        cout << cnt[i] << endl;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1195513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scrum Master 如何更好的支持PO?

在过去几年中&#xff0c;和许多Scrum Master交流时&#xff0c;我遇到一个令人担忧的模式。虽然我们有Scrum指南和其他补充资源&#xff0c;许多Scrum Master&#xff0c;特别是刚起步的Scrum Master们&#xff0c;还在日复一日的为如何帮助Product Owner而挣扎着。 以下是我…

《QT从基础到进阶·十九》QThread多线程使用

1、平时在写多线程的时候有时候会遇到下面一种情况&#xff1a; 情景&#xff1a; this是主线程&#xff0c;model是子线程&#xff0c;把model move到线程后可以在主线程通过emit开启子线程&#xff0c;emit CalcuSignal()&#xff1b;开启子线程执行StartCalculateAll,里面有…

SpringBoot+MybatisPlus Restful示例

增删改查,分页 CREATE TABLE tbl_book ( id int NOT NULL AUTO_INCREMENT, type varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, desc_ription varchar(255) CHAR…

JavaScript基础入门04

目录 1.WebAPI 背景知识 1.1什么是 WebAPI 1.2什么是 API 2.DOM 基本概念 2.1什么是 DOM 2.2DOM 树 3.获取元素 3.1querySelector 3.2querySelectorAll 4.事件初识 4.1基本概念 4.2事件三要素 4.3简单示例 5.操作元素 5.1获取/修改元素内容 5.2获取/修改元素属性…

微服务版mall电商项目本地开发环境启动前后端服务详细指导教程

微服务版mall电商项目本地开发环境启动前后端服务详细指导教程 前言1 克隆mall-swarm 电商项目源码2 安装启动mall-swarm项目需要的第三方服务2.1 安装MySql8 并初始化数据2.2 安装Nacos2.3 安装Redis2.4 RabbitMQ安装2.5 ElasticSearch安装2.6 MongoDB安装2.7 Minio安装 3 启动…

多目标优化框架

随着模型越来越复杂&#xff0c;优化目标越来越多&#xff0c;传统算法都慢慢地无法胜任复杂优化任务&#xff0c;更为智能的优化方法也就应运而生了。其中有一类是进化优化算法&#xff0c;这类算法的思想来源是自然界的“优胜劣汰”法则&#xff0c;通过不停地保留好的个体最…

Linux学习-破解Root密码

破解root密码思路 1&#xff09;重启系统,进入 救援模式 开启虚拟机A&#xff0c;在此界面按e键 在linux开头的该行&#xff0c;将此行的ro修改为rw 然后空格输入 rd.break 按 ctrl x 启动&#xff0c;会看到switch_root:/# 2&#xff09;切换到硬盘操作系统环境 # chroot …

浅谈工厂电能管理系统改造与产品选型

叶根胜 安科瑞电气股份有限公司 上海嘉定202001 摘要&#xff1a;随着经济的快速发展&#xff0c;能源紧张和环境恶化引起了全世界的密切关注。电能在所有能源中消耗量大&#xff0c;但不可或缺&#xff0c;因此对电能的统一管理尤为重要。只有准确可靠的计量电能、分级管理和…

显卡服务器租用价格受哪些因素影响

显卡服务器也叫做GPU服务器&#xff0c;是一种有高性能显卡的服务器系统&#xff0c;显卡服务器能在大数据处理、科学计算等领域有很好的性能表现。今天小编就给大家讲一讲显卡服务器租用价格受哪些因素影响呢&#xff1f; 1.显卡类型和数量&#xff1a;一般说来中高端显卡的租…

【华为OD题库-007】代表团坐车-Java

题目 某组织举行会议&#xff0c;来了多个代表团同时到达&#xff0c;接待处只有一辆汽车&#xff0c;可以同时接待多个代表团&#xff0c;为了提高车辆利用率&#xff0c;请帮接待员计算可以坐满车的接待方案&#xff0c;输出方案数量。 约束: 1.一个团只能上一辆车&#xff0…

性格软弱怎么办?如何改变性格软弱?

软弱指的是身体衰弱无力气&#xff0c;而这里要说的是性格软弱&#xff0c;性格软弱的人&#xff0c;大多是不自信的&#xff0c;无主见&#xff0c;容易妥协&#xff0c;害怕产生矛盾&#xff0c;遇到问题就想逃避&#xff0c;自我否定&#xff0c;担心自己这也不行那也不行。…

剑指JUC原理-18.同步协作

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

vim相关命令讲解!

本文旨在讲解vim 以及其相关的操作&#xff01; 希望读完本文&#xff0c;读者会有一定的收获&#xff01;好的&#xff0c;干货马上就来&#xff01; 初识vim 在讲解vim之前&#xff0c;我们首先要了解vim是什么&#xff0c;有什么作用&#xff1f;只有了解了vim才能更好的理…

ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 …

怎么用电脑开发安卓app?能外包吗?

随着智能手机的普及&#xff0c;安卓应用程序的开发需求也越来越高&#xff0c;许多人都想开发自己的安卓应用程序&#xff0c;但苦于缺乏相关知识和技能&#xff0c;本文将介绍如何使用电脑开发安卓应用程序&#xff0c;以及是否可以将开发工作外包给专业的开发团队。 一、了…

7天入门python系列之第三天Python的函数和模块

第3天主要是学习Python的函数和模块 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。第三天开始python函数和…

python3GUI--PyQt5打包心得(二)nuitka、inno Setup(详细图文演示、附所有软件)

文章目录 一&#xff0e;前言二&#xff0e;准备1.nuitka1.1介绍1.3项目地址1.3安装 2.mingw641.1介绍1.2下载安装 3.Inno Setup1.1介绍1.2安装 三&#xff0e;nuitka打包1.打包2.装mingw643.装ccahe4.打包完成 四&#xff0e;测试效果五&#xff0e;inno Setup制作安装软件1.配…

呼叫中心系统如果对接大模型

电话机器人对接大模型的例子 介绍 自chatgpt3.5发布以来&#xff0c;各种大模型飞速发展&#xff0c;各行各业都有接入大模型的需求&#xff0c;呼叫中心行业非常适合通过接入大模型用AI来回答用户的各种咨询&#xff0c;降低人力资源&#xff0c;使用顶顶通呼叫中心中间件&a…

日志收集的方式和优点

日志是组织 IT 环境中发生的所有事情的记录。它们通常是一系列带有时间戳的消息&#xff0c;可为您提供有关网络中所有活动的第一手信息。 网络中的每个设备和应用程序都会生成日志数据以及用于监控网络流量的 NetFlow 数据&#xff0c;日志是安全信息和事件管理&#xff08;S…