洛谷P1144 最短路计数
题目描述
给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。
输入输出格式
输入格式:
输入第一行包含2个正整数N,M,为图的顶点数与边数。
接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。
输出格式:
输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点i则输出0。
输入输出样例
输入样例
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
输出样例
1
1
1
2
4
对于20%的数据,N ≤ 100;
对于60%的数据,N ≤ 1000;
对于100%的数据,N<=1000000,M<=2000000。
这道题,乍一看是求最短路的。然而看看数据范围,如果还是单纯的一条一条求最短路的话就GG了,比如下图

所以必须想一些法子解决这道题。
咱们再想一想,求最短路的话,可以用 bfs 吧?根据 bfs 特性,走到的点一定满足从起点到该点是一条最短路,所以这一个点的最短路的条数就一定等于只用一步就走到这个结点的其他结点的最短路条数之和,就像下面这张图。

到结点1的最短路有200条,到结点2的最短路有500条,结点1和结点2都能走一步到达结点三,那么到达结点3的最短路就有2500条。
代码也很简单
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 1e6 + ;
const int mod = 1e5 + ;
const int INF = 0x3f3f3f3f;
vector<int>v[maxn];
int n, m;
int cnt[maxn], dis[maxn];
void bfs()
{
for(int i = ; i < maxn; ++i) dis[i] = INF;
queue<int>q;
q.push(); dis[] = ; cnt[] = ;
while(!q.empty())
{
int now = q.front(); q.pop();
for(int i = ; i < v[now].size(); ++i)
{
if(dis[v[now][i]] >= dis[now] + )
{
if(dis[v[now][i]] == INF) q.push(v[now][i]);
dis[v[now][i]] = dis[now] + ;
cnt[v[now][i]] += cnt[now];
cnt[v[now][i]] %= mod;
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= m; ++i)
{
int a, b; scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
bfs();
for(int i = ; i <= n; ++i) printf("%d\n", cnt[i]);
return ;
}
洛谷P1144 最短路计数的更多相关文章
- 洛谷P1144 最短路计数(SPFA)
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
- 洛谷 P1144 最短路计数 解题报告
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...
- 洛谷——P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
- 洛谷 P1144 最短路计数 题解
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...
- 洛谷P1144 最短路计数 及其引申思考
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...
- 洛谷P1144最短路计数题解
最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...
- 洛谷 P1144 最短路计数
传送门:https://www.luogu.org/problemnew/show/P1144 这虽然是一道普及+的题,然而我发现我现在还没做过,这也就直接导致我今天模拟T2只杠了个暴力分…… 那这道 ...
- 洛谷P1144——最短路计数
题目:https://www.luogu.org/problemnew/show/P1144 spfa跑最短路的同时记录cnt数组表示到达方案数. 代码如下: #include<iostream ...
- 洛谷P1144 最短路计数【堆优化dijkstra】
题目:https://www.luogu.org/problemnew/show/P1144 题意:问1到各个节点的最短路有多少条. 思路:如果松弛的时候发现是相等的,说明可以经过该点的最短路径到达当 ...
- 洛谷 P1144 最短路计数 Label:水
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
随机推荐
- c#中打开Excel文档
方法一:(调用Excel的COM组件) 在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 11.0 Object ...
- [日常] C语言中指针变量
CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址.编译和链接过程的一项重要任务就是找到这些名称所对应的 ...
- [android] 手机卫士绑定sim卡
更新: 收不到启动广播,查看知乎,好像是说高版本的系统都禁止了 还可以通过adb发送开机广播 adb shell am broadcast -a android.intent.action.BOOT_ ...
- win10 管理工具中添加 oracle 10g驱动
重装了系统,在应用oracle 10g时,一直在管理工具中没有添加成功ODBC驱动,今天找到解决方法了. 状态如下: 解决方法: c盘——windows——SysWOW64——odbcad32.exe ...
- Matlab diag的用法
X = diag(v,k) 以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线:当k>0时,v为上方第k条对角线 几个例子: 当k> v=[1 2 3]; >& ...
- C#多线程——同步
多个线程(不仅仅局限于相同进程)如果需要访问相同的可变资源的话就可能需要考虑到线程同步的手段.CPU的线程和进程管控我这里就不去说了,计算机组成原理里面的东西 那么既然要让线程的步调一致,那么我们首先 ...
- Java基础回顾Application(一)
Java Web 中application(应用级) session(会话级) request(请求级) 在JavaWeb 中实现数据共享往往通过定义属性的方法来实现,而什么是属性呢?它类似于Hash ...
- C#设计模式--迭代器模式(学习Learning hard设计模式笔记)
/// <summary> /// 抽象聚合接口 /// </summary> public interface IListCollection { Iterator GetI ...
- c语言学习笔记-do......while
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.do......while函数意义 循环执行(人机交互) 二.do......while函数结构 do{ 语句1: 语句2: ...
- 前端学习 之 Bootstrap (一)
中文文档 一.前言 1.简介 Bootsrtap作为一个前端框架,开箱即用,封装了前段开发的大量底层细节,开放灵活,对响应式设计网页很好支持,组件丰富,社区活跃. 特点: 可重用性 一致性 灵活的栅栏 ...