洛谷P1144
最短路计数
题目描述
给出一个 \(N\) 个顶点 \(M\) 条边的无向无权图,顶点编号为 \(1\sim N\)。问从顶点 \(1\) 开始,到其他每个点的最短路有几条。
输入格式
第一行包含 \(2\) 个正整数 \(N,M\),为图的顶点数与边数。
接下来 \(M\) 行,每行 \(2\) 个正整数 \(x,y\),表示有一条由顶点 \(x\) 连向顶点 \(y\) 的边,请注意可能有自环与重边。
输出格式
共 \(N\) 行,每行一个非负整数,第 \(i\) 行输出从顶点 \(1\) 到顶点 \(i\) 有多少条不同的最短路,由于答案有可能会很大,你只需要输出 $ ans \bmod 100003$ 后的结果即可。如果无法到达顶点 \(i\) 则输出 \(0\)。
样例 #1
样例输入 #1
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
样例输出 #1
1
1
1
2
4
提示
\(1\) 到 \(5\) 的最短路有 \(4\) 条,分别为 \(2\) 条 \(1\to 2\to 4\to 5\) 和 \(2\) 条 \(1\to 3\to 4\to 5\)(由于 \(4\to 5\) 的边有 \(2\) 条)。
对于 \(20\%\) 的数据,\(1\le N \le 100\);
对于 \(60\%\) 的数据,\(1\le N \le 10^3\);
对于 \(100\%\) 的数据,\(1\le N\le10^6\),\(1\le M\le 2\times 10^6\)。
1、因为边权是1所以bfs,spfa,dijkstra都可以因为spfa最近在学习所以而且spfa打起来挺顺手的,就用spfa打的
2、我们用一个数组记录每个点最短路的答案
3、这里自环和重边不要用考虑,因为前向星中存的边会跑完,重边会跑两遍,这样的话不会影响计数的,举个例子就是
1 2
1 2
1 2
这里答案会输出1 2,因为1到2有两条边会都会跑所以最短路有两条
4、我们考虑ans的更新。采用分类讨论。

if(d[j] > d[t] + 1)
{
d[j] = d[t] + 1;
ans[j] = ans[t] % mod;
if(!inq[j])
{
inq[j] = 1;
q.push(j);
}
}
else if(d[j] == d[t] + 1)
ans[j] =(ans[j] + ans[t]) % mod;
5、注意答案要边计算边取模
6、注意要初始化链表啊,表头最开始全部初始化为 -1
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e6 + 10, M = 2e6 + 10, mod = 100003;
int n, m, ans[N];
int h[N], e[M], ne[M], idx;
void add(int a, int b)
{
e[idx] = b; ne[idx] = h[a]; h[a] = idx ++;
}
int d[N];
bool inq[N];
void spfa()
{
queue<int> q;
for(int i = 1; i <= n; ++ i) d[i] = 0x7fffffff;
memset(inq, 0, sizeof inq);
d[1] = 0; q.push(1); inq[1] = 1; ans[1] = 1;
while(q.size())
{
auto t = q.front(); q.pop(); inq[t] = 0;
for(int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if(d[j] > d[t] + 1)
{
d[j] = d[t] + 1;
ans[j] = ans[t] % mod;
if(!inq[j])
{
inq[j] = 1;
q.push(j);
}
}
else if(d[j] == d[t] + 1)
ans[j] =(ans[j] + ans[t]) % mod;
}
}
}
int main()
{
freopen("1.txt","r",stdin);
memset(h, -1, sizeof h);
cin >> n >> m;
for(int i = 1; i <= m; ++ i)
{
int a, b; cin >> a >> b;
add(a, b);add(b, a);
}
spfa();
for(int i = 1; i <= n; ++ i) cout << ans[i] << endl;
return 0;
}
洛谷P1144的更多相关文章
- 洛谷P1144 最短路计数(SPFA)
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
- 洛谷 P1144 最短路计数
传送门:https://www.luogu.org/problemnew/show/P1144 这虽然是一道普及+的题,然而我发现我现在还没做过,这也就直接导致我今天模拟T2只杠了个暴力分…… 那这道 ...
- 洛谷 P1144 最短路计数 解题报告
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...
- 洛谷P1144 最短路计数 及其引申思考
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...
- 洛谷P1144——最短路计数
题目:https://www.luogu.org/problemnew/show/P1144 spfa跑最短路的同时记录cnt数组表示到达方案数. 代码如下: #include<iostream ...
- 洛谷——P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
- 洛谷 P1144 最短路计数 题解
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...
- 洛谷P1144 最短路计数【堆优化dijkstra】
题目:https://www.luogu.org/problemnew/show/P1144 题意:问1到各个节点的最短路有多少条. 思路:如果松弛的时候发现是相等的,说明可以经过该点的最短路径到达当 ...
- 洛谷 P1144 最短路计数 Label:水
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
- 洛谷P1144最短路计数题解
最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...
随机推荐
- fastposter v2.16.0 让海报开发更简单
fastposter v2.16.0 让海报开发更简单 fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像) 点击代码直接生成各种 ...
- 从零玩转系列之微信支付实战PC端支付微信回调接口搭建
一.前言 halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布 ...
- 从0开发属于自己的nestjs框架的mini 版 —— ioc篇
如今,nodejs的框架也是层出不穷,偏向向底层的有 express.koa. Fastify,偏向于上层有阿里的 Egg.thinkjs .还有国外的 nestjs. 在这里我更喜欢 nestjs, ...
- 彻底搞懂Vue针对数组和双向绑定(MVVM)的处理方式
欢迎关注我的博客:https://github.com/wangweianger/myblog Vue内部实现了一组观察数组的变异方法,例如:push(),pop(),shift()等. Object ...
- 王道oj/problem11(函数调用中实现指针的传递)
网址:http://oj.lgwenda.com/prblem/11 思路:函数中的j=&i,为i的地址 *j可以从地址访问,从而改变i的值 代码: #define _CRT_SECURE_N ...
- Windows 环境下载、安装、使用(.Net 5.0) Redis 数据库及常见问题的解决
〇.前言 Redis (Remote Dictionary Server 远程字典服务)是一个使用 ANSI C 编写的开源.包含多种数据结构,支持网络.基于内存.可选持久性的键值对存储数据库,是现在 ...
- 重返照片的原始世界:我为.NET打造的RAW照片解析利器
重返照片的原始世界:我为.NET打造的RAW照片解析利器 如果你是我的老读者,你可能还记得,在2019年,我冒险进入了一片神秘的领域--用C#解析RAW格式的照片: 20191208 - 用.NET解 ...
- Combobox后台绑定
本文主要介绍WPF中Combobox的后台绑定,我在这里主要讲解数据驱动 1.对于前台绑定,我们首先写出想要绑定的对象 新建一个Models文件夹,将Student类写入 public class S ...
- 关于XXLJOB集群模式下调度失败的问题
xxljob在集群模式下调度高频任务时,有时会出现调度失败的问题,具体报错如下: java.io.EOFException: HttpConnectionOverHTTP@6be8bf0c(l:/10 ...
- Prompt 指北:如何写好 Prompt,让 GPT 的回答更加精准
目录 1. 得亏 GPT 脾气好 2. 玩 GPT 得注意姿势 3. 指南指北指东指西 3.1 首先你得理解 GPT 是咋工作的 3.2 "Prompt 工程"走起 3.3 奇淫技 ...