博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1144 最短路计数 解题报告
阅读量:5105 次
发布时间:2019-06-13

本文共 1527 字,大约阅读时间需要 5 分钟。

P1144 最短路计数

题目描述

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

输入输出格式

输入格式:

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

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

输出格式:

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


最短路计数,这个用spfa写的。

思路和disj是一样的


Code:

#include 
#include
#include
using namespace std;const int N=1000010;const int mod=100003;int head[N],to[N<<2],next[N<<2],cnt0;void add(int u,int v){ next[++cnt0]=head[u];to[cnt0]=v;head[u]=cnt0; next[++cnt0]=head[v];to[cnt0]=u;head[v]=cnt0;}int n,m,dis[N],used[N],cnt[N];queue
q;void spfa(){ memset(dis,0x3f,sizeof(dis)); dis[1]=0;cnt[1]=1; q.push(1); while(!q.empty()) { int u=q.front(); q.pop(); for(int i=head[u];i;i=next[i]) { int v=to[i]; if(dis[v]>dis[u]+1) { dis[v]=dis[u]+1; cnt[v]=cnt[u]; if(!used[v]) { used[v]=1; q.push(v); } } else if(dis[v]==dis[u]+1) cnt[v]=(cnt[v]+cnt[u])%mod; } }}int main(){ scanf("%d%d",&n,&m); int u,v; for(int i=1;i<=m;i++) { scanf("%d%d",&u,&v); add(u,v); } spfa(); for(int i=1;i<=n;i++) printf("%d\n",cnt[i]); return 0;}

2018.7.1

转载于:https://www.cnblogs.com/butterflydew/p/9250225.html

你可能感兴趣的文章
进击的Objective-C-------------继承初始化
查看>>
EasyNVR RTSP转HLS(m3u8+ts)流媒体服务器前端构建之:bootstrap-datepicker日历插件的实时动态展现...
查看>>
兼容性强、简单、成熟、稳定的RTMPClient客户端拉流功能组件EasyRTMPClient
查看>>
js中各种跨域问题实战小结(二)
查看>>
JavaScript 缓存基本原理
查看>>
Stack_L.h
查看>>
zookeeper系列之九—zookeeper数据模型
查看>>
linux C++下捕获崩溃日志
查看>>
[Ting's笔记Day1] Ruby on Rails练习- MacOS安装篇
查看>>
Day09 -超级经典面试题:Ruby的a ||= b(or-equals)是什么意思呢?
查看>>
MAVEN的结构认识篇
查看>>
MySQL基础语法
查看>>
TCP/IP详解学习笔记(1)-- 概述
查看>>
Struts2源代码解读之Action调用
查看>>
char 与 unsigned char的本质区别
查看>>
Struts2——通配符,Action Method_DMI
查看>>
Lucene 4.7 --实现搜索
查看>>
Jquery ui autocomplete简单api
查看>>
跨域及jsonp
查看>>
【LOJ#3146】[APIO2019]路灯(树套树)
查看>>