洛谷P1144——最短路计数
题目:https://www.luogu.org/problemnew/show/P1144
spfa跑最短路的同时记录cnt数组表示到达方案数。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,a,b,head[1000005],ct,dis[1000005],cnt[1000005],hp[10000005],h=1,t=1,p=100003;
bool vis[1000005];
struct N{
int to,next;
}edge[4000005];
void add(int x,int y)
{
ct++;
edge[ct].to=y;
edge[ct].next=head[x];
head[x]=ct;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
memset(dis,11,sizeof dis);
dis[1]=0;cnt[1]=1;
hp[h]=1;vis[1]=1;
while(1)
{
bool fd=0,fj=0;
if(h==t)fd=1;
for(int i=head[hp[h]];i;i=edge[i].next)
{
int u=edge[i].to;
if(dis[u]>dis[hp[h]]+1)
{
if(!vis[u])
{
t++;
if(t>10000005)t=1;
hp[t]=u;
fj=1;
}
vis[u]=1;
dis[u]=dis[hp[h]]+1;
cnt[u]=cnt[hp[h]]%p;
}
else if(dis[u]==dis[hp[h]]+1)//!
{
if(!vis[u])
{
t++;
if(t>10000005)t=1;
hp[t]=u;
fj=1;
}
vis[u]=1;
cnt[u]+=cnt[hp[h]];
cnt[u]%=p;
}
}
if(fd&&!fj)break;
h++;
if(h>10000005)h=1;
}
for(int i=1;i<=n;i++)
printf("%d\n",cnt[i]%p);
return 0;
}
洛谷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 最短路计数【堆优化dijkstra】
题目:https://www.luogu.org/problemnew/show/P1144 题意:问1到各个节点的最短路有多少条. 思路:如果松弛的时候发现是相等的,说明可以经过该点的最短路径到达当 ...
- 洛谷 P1144 最短路计数 Label:水
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
随机推荐
- java中Executor、ExecutorService、ThreadPoolExecutor介绍
源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** * Executes the given c ...
- Redis闲谈(1):构建知识图谱
场景:Redis面试 (图片来源于网络) 面试官: 我看到你的简历上说你熟练使用Redis,那么你讲一下Redis是干嘛用的? 小明: (心中窃喜,Redis不就是缓存吗?)Redis主要用作缓存,通 ...
- idea 的IDE
idea 是与eclipse齐名的IDE(集成开发工具),以智能闻名,不过对于熟悉eclipse的的用户来说,初次接触idea有些让人搞不清方向,下面介绍一下简单的使用 方式. 1.安装 官网下载ul ...
- IIS7.5 配置ASP+ACCESS使用环境(转)
Win7默认不安装IIS7.5. 安装的步骤为:开始-控制面板-程序-打开或关闭Windows功能-Internet信息服务.IIS7.5安装时需要注意的是,如果需要ASP.ASP.NET等的支持,是 ...
- SQL 经验总结
总结日常工作中使用SQL遇到的坑和技巧,一是加深印象,二是方便回顾.会不定期更新. 坑 1.多表联查时要使用表名,如果两个表的有列名相同的情况你没有加别名,那么sql编译器就不知道使用哪个列.这时进行 ...
- ios Symbol(s) not found for architecture arm64总结 含隐藏错误cocoapods
一.通用 报错:Desktop/project/ASDF/WEIXIN/libWeChatSDK.a (3 slices) Undefinedsymbols for architecture arm6 ...
- JAVA中equals()与==的区别详解
在进行判断操作时,常常会用到==或者equals()进行等价判断,那么两者究竟有什么区别呢,下面整理一下个人理解. 简单介绍: ==是一种引用相等性比较符,判断引用到堆上同一个对象的两个引用是相等的. ...
- Grunt 学习笔记【2】---- 配置和创建任务
本文主要讲Grunt任务配置. 说明:本文所有示例都基于Grunt 0.4.5版本. 一 说明 使用Grunt实现项目的打包等工程化工作,实际上是通过Grunt提供的机制和插件,配置一个个任务(例如: ...
- TCP黏包问题
什么是黏包?什么情况下会出现黏包的情况?该如何避免黏包的情况? 首先来看一个例子 #服务端 import time from socket import * server = socket(AF_IN ...
- 微信小程序开发:学习笔记[5]——JavaScript脚本
微信小程序开发:学习笔记[5]——JavaScript脚本 快速开始 介绍 小程序的主要开发语言是 JavaScript ,开发者使用 JavaScript 来开发业务逻辑以及调用小程序的 API 来 ...