P1144 最短路计数 题解

这篇具有很好参考价值的文章主要介绍了P1144 最短路计数 题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

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

输入格式

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

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

输出格式

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

样例

样例输入

5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5

样例输出

1
1
1
2
4

数据范围与提示

样例说明: 1 1 1 5 5 5 的最短路有 4 4 4 条,分别为 2 2 2 1 → 2 → 4 → 5 1\to 2\to 4\to 5 1245 2 2 2 1 → 3 → 4 → 5 1\to 3\to 4\to 5 1345(由于 4 → 5 4\to 5 45 的边有 2 2 2 条)。

对于 20 % 20\% 20% 的数据, 1 ≤ N ≤ 100 1\le N \le 100 1N100
对于 60 % 60\% 60% 的数据, 1 ≤ N ≤ 1 0 3 1\le N \le 10^3 1N103
对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 6 1\le N\le10^6 1N106 1 ≤ M ≤ 2 × 1 0 6 1\le M\le 2\times 10^6 1M2×106

题目传送门文章来源地址https://www.toymoban.com/news/detail-745175.html

完整代码

#include <bits/stdc++.h>
using namespace std;
inline int read() {
    register int x = 1, ans = 0;
    register char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')
            x = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        ans = (ans << 3) + (ans << 1) + ch - 48;
        ch = getchar();
    }
    return x * ans;
}
int n, m, c = 0;
bool vis[1000002];
int h[4000002], dist[1000002], cnt[1000002];
struct node {
    int to, nxt;
} e[4000002];
void add(int u, int v) {
    e[++c].to = v;
    e[c].nxt = h[u];
    h[u] = c;
}
struct cmp {
    bool operator()(int a, int b) { return dist[a] > dist[b]; }
};
priority_queue<pair<int, int> > q;
int main() {
    n = read(), m = read();
    for (int i = 1, a, b; i <= m; i++) {
        a = read(), b = read();
        add(a, b), add(b, a);
    }
    memset(dist, 0x3f, sizeof(dist));
    dist[1] = 0, cnt[1] = 1;
    q.push(make_pair(0, 1));
    while (q.size()) {
        int u = q.top().second;
        q.pop();
        if (vis[u])
            continue;
        vis[u] = 1;
        for (int i = h[u]; i; i = e[i].nxt) {
            int v = e[i].to;
            if (dist[v] > dist[u] + 1) {
                dist[v] = dist[u] + 1, cnt[v] = cnt[u];
                q.push(make_pair(-dist[v], v));
            } else if (dist[v] == dist[u] + 1)
                cnt[v] = (cnt[v] + cnt[u]) % 100003;
        }
    }
    for (int i = 1; i <= n; i++)
    	printf("%d\n", cnt[i]);
    return 0;
}

到了这里,关于P1144 最短路计数 题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 青少年软件编程C++一级真题(202212)

    1、输入一个整数x,输出这个整数加1后的值,即x+1的值。 时间限制:1000 内存限制:65536 输入 一个整数x(0 ≤ x ≤ 1000)。 输出 按题目要求输出一个整数。 样例输入 样例输出 2、给定整数a、b、c,计算(a / b)*c的值,这里的除法为实数除法。 时间限制:1000 内存限制:65536 输

    2024年02月09日
    浏览(47)
  • 2022.12 青少年软件编程(Python) 等级考试试卷(一级)

    2022年12月 青少年软件编程(Python) 等级考试试卷(一级) 分数: 100 题数: 37 一、 单选题(共 25 题, 共 50 分) 1. 关于Python语言的注释,以下选项中描述错误的是?( ) A.Python语言有两种注释方式:单行注释和多行注释 B.Python语言的单行注释以#开头 C.Python多行注释使用###来

    2024年02月11日
    浏览(50)
  • 蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点

    1.准备工作 (1)选择背景 Colorful City; (2)保留角色小猫,选择角色Ballerina。 2.功能实现 (1)角色小猫初始位置在舞台左下方,角色Ballerina初始位置在舞台右下方,如下图所示; (2)点击小猫,小猫询问\\\"请输入一段英文\\\",输入的英文只包含大写字母、空格和标点符号;

    2024年01月21日
    浏览(60)
  • 2023年5月青少年软件编程(Python) 等级考试试卷(二级)

    青少年软件编程(Python) 等级考试试卷(二级) 一、 单选题(共 25 题, 共 50 分) 1.运行以下程序, 如果通过键盘先后输入的数是 1 和 3, 输出的结果是? ( ) a=int(input() ) b=int(input() ) if a b: a=b print(a) A.3 1 B.1 3 C.1 D.3 试题类型: 单选题 标准答案: D 试题难度: 一般 试题解

    2024年02月09日
    浏览(48)
  • 2023年5月青少年软件编程(Python) 等级考试试卷(四级)

    青少年软件编程(Python) 等级考试试卷(四级)2023.6 分数: 100 题数: 38 一、 单选题(共 25 题, 共 50 分) 1.下列程序段的运行结果是? ( ) def s(n): if n==0: return 1 else: return n +s(n-1) print(s(7)) A.29 B.27 C.1 D.0 试题类型: 单选题 标准答案: A 试题难度: 一般 试题解析: 递归公式

    2024年02月09日
    浏览(39)
  • 全国青少年信息素养大赛图形化编程决赛·模拟三卷,含答案解析

    目录 一、单选题 下载文章打印做题: 全国青少年电子信息智能创新大赛 图形化编程· 挑战 题模拟 三 卷 一、单选题 1. 运行如下图所示的程序,输入60后,变量“数值

    2023年04月24日
    浏览(48)
  • 石头剪刀布--蓝桥杯大赛青少年创意编程C++高级组模拟题

    石头剪刀布 Description 放假期间,小蓝与电脑对垒,玩起了一款经典的游戏: “石头剪刀布” 。游戏规则想必大家已经非常熟悉了:两边一样则为平局,否则石头胜于剪刀;剪刀胜于布;布胜于石头。小蓝与电脑的对垒一共有 n 个回合,平局或败局得分为 0;胜局得分取决于

    2023年04月12日
    浏览(62)
  • 2023-05-20青少年软件编程(C语言)等级考试试卷(一级)解析

    2023-05-20青少年软件编程(C语言)等级考试试卷(一级)解析 T1、输出第二个整数 输入三个整数,把第二个输入的整数输出。 时间限制:1000 内存限制:65536 输入 只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。 输出 只有一行,一个整数,即输入

    2024年02月09日
    浏览(49)
  • 2023年3月 青少年软件编程(C 语言) 等级考试试卷(一级)

    2023. 03 青少年软件编程(C 语言) 等级考试试卷(一级) 1.字符长方形 给定一个字符, 用它构造一个长为 4 个字符, 宽为 3 个字符的长方形, 可以参考样例输出。 时间限制: 1000 内存限制: 65536 输入 输入只有一行, 包含一个字符。 输出 该字符构成的长方形, 长 4 个字

    2023年04月23日
    浏览(54)
  • 全国青少年软件编程等级考试Python标准解读(1_6级)

    考核性质: 全国青少年软件编程等级考试标准(Python语言)由中国电子学会科普培训与应用推广中心和北京大学信息科学技术学院共同制定。由全国青少年电子信息科普创新联盟标准工作组开发,由中国电子学会普及工作委员会审核通过,适用于由中国电子学会举办的全国青

    2024年02月05日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包