1.無權圖最短路邊權為1

2.如果兩個點恰好不能被更新(d[y]==d[x]+1)那麼就能通過x的所有最短路到達y,所以ans[y]+=ans[x]

3.如果兩個點不能恰好被更新(d[y]>d[x]+1)那麼到達y的最短路目前只有通過x到達,所以ans[y]=ans[x]

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=;
const int maxm=;
const int mod=;
int n,m;
int head[maxn],cnt;
struct node{
int v,nxt;
}e[maxn*];
void add(int u,int v){
e[++cnt].v=v;e[cnt].nxt=head[u];head[u]=cnt;
}
queue<int>q;
int d[maxn],v[maxn],c[maxn];
void spfa(){
d[]=;v[]=;q.push();
c[]=;//初值
while(!q.empty()){
int x=q.front();q.pop();v[x]=;
for(int i=head[x];i;i=e[i].nxt){
int y=e[i].v;
if(d[y]>d[x]+){
d[y]=d[x]+;
c[y]=c[x];//覆蓋
if(!v[y])q.push(y),v[y]=;
}
else if(d[y]==d[x]+)c[y]+=c[x],c[y]%=mod;//相等就合併
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,x,y;i<=m;i++){
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
memset(d,0x3f,sizeof(d));
spfa();
for(int i=;i<=n;i++)printf("%d\n",c[i]);
}

最新文章

  1. AE影视后期之跳跃音符制作
  2. python 异常处理、文件常用操作
  3. Cwinux源码解析(一)
  4. 类型强转(type cast)
  5. C专家编程学习 1
  6. Nginx优化—配置优化
  7. IOS设计模式学习(19)策略
  8. Unix/Linux环境C编程入门教程(18) kali-linuxCCPP开发环境搭建
  9. C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
  10. nyoj 592 spiral grid(广搜)
  11. 3D Game Programming withDX11 学习笔记(一) 数学知识总结
  12. iOS下JS与OC互相调用(一)--UIWebView 拦截URL
  13. Linux下的磁盘分区和逻辑卷
  14. Keepalived 的使用
  15. 实现一个类似 http-server 的静态服务 一一 ks-server
  16. MacOS 10.12 Sierra 安全性与隐私没有任何来源选项解决方法
  17. Mysql多实例安装笔记
  18. Python全栈之路----Python2与Python3
  19. 【转】ASP.NET Core 依赖注入
  20. django之创建第4-2个项目-访问class类属性和类方法

热门文章

  1. charles刷分微信跳一跳小程序对https的理解
  2. 继续servlet理论篇
  3. PHP生成一个不重复随机数组的封装方法
  4. datagrid 行号问题综合
  5. 关于Spring MVC分页
  6. python获取系统信息psutil
  7. 微信小程序的ajax数据请求wx.request
  8. CS231n 2016 通关 第五、六章 Batch Normalization 作业
  9. kvm详细介绍
  10. 华为CodeCraft2018 周进展