题目描述
给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1∼N。问从顶点 1 开始,到其他每个点的最短路有几条。

输入格式
第一行包含 2 个正整数 N,M,为图的顶点数与边数。

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

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

样例
样例输入
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
样例输出
1
1
1
2
4
样例解释
1 到 5 的最短路有 4 条,分别为 2 条 1→2→4→5 和 2 条 1→3→4→5(由于 4→5 的边有 2 条)。

数据范围与提示
对于 20% 的数据,N≤100;

对于 60% 的数据,N≤1000;

对于 100% 的数据,1≤N≤100000,0≤M≤200000。

-------------------------------------------------------------------------------------------------------------------------

dij求最短路,增加数组cs[ ],用于统计对应点的最短路径条数。

如果刚计算出最短路,则 cs[v]=cs[u]。

如果最短路已经计算出切新计算的最短路与之相同,那么 cs[v]+=cs[u];

注意记得取模。

-------------------------------------------------------------------------------------------------------------------------

 1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn=1e5+10;
5 const int maxm=2e5+10;
6 int n,m;
7 struct edge
8 {
9 int u,v,w,nxt;
10 }e[maxm<<1];
11 int head[maxn],js;
12 void addage(int u,int v)
13 {
14 e[++js].u=u;e[js].v=v;e[js].w=1;
15 e[js].nxt=head[u];head[u]=js;
16 }
17 ll dis[maxn],cs[maxn];
18 bool vis[maxn];
19 struct node
20 {
21 int p,dis;
22 bool operator < (node b)const
23 {
24 return dis>b.dis;
25 }
26 };
27 void dij(int x)
28 {
29 memset(dis,0x3f,sizeof dis);
30 memset(cs,0,sizeof cs);
31 dis[x]=0;cs[x]=1;
32 priority_queue<node>q;
33 q.push((node){x,0});
34 while(!q.empty())
35 {
36 node t=q.top();
37 q.pop();
38 int u=t.p,d=t.dis;
39 if(vis[u])continue;
40 vis[u]=1;
41 for(int i=head[u];i;i=e[i].nxt)
42 {
43 int v=e[i].v;
44 if(dis[v]>dis[u]+e[i].w)
45 {
46 dis[v]=dis[u]+e[i].w;
47 cs[v]=cs[u];
48 q.push((node){v,dis[v]});
49 }
50 else if(dis[v]==dis[u]+e[i].w) cs[v]=(cs[v]+cs[u])%100003;
51 }
52 }
53 }
54 int main()
55 {
56 scanf("%d%d",&n,&m);
57 for(int u,v,i=0;i<m;++i)
58 {
59 scanf("%d%d",&u,&v);
60 addage(u,v);addage(v,u);
61 }
62 dij(1);
63 for(int i=1;i<=n;++i)printf("%lld\n",cs[i]);
64 return 0;
65 }

LOJ10077的更多相关文章

随机推荐

  1. BOM主数据-用ECN实现可变BOM

    用ECN变更号实现可变BOM:通过ECN变更号的参数类型来实现BOM的可变配置. 物料编号:2104 (1)首先BOM的父项物料主数据<基本数据1>必须设置栏位"参数有效值&qu ...

  2. linux系统搭建ftp服务器及创建用户使用

    linux 系统下搭建ftp服务器 ftp是什么 FTP是 File Transfer Protocol 文件传输协议的英文名称,用于在Internet上控制文件的双向传输. 同时它也是一个应用程序. ...

  3. Adnc简介

    Adnc是一个轻量级的.Net Core微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权,包含基础的后台管理功能,代码简洁.易上手.学习成本 ...

  4. Java并发包源码学习系列:CLH同步队列及同步资源获取与释放

    目录 本篇学习目标 CLH队列的结构 资源获取 入队Node addWaiter(Node mode) 不断尝试Node enq(final Node node) boolean acquireQue ...

  5. Linux下MiniGUI库的安装

    Linux下MiniGUI库的安装 今天试了下安装MiniGUI的库 先仿照官网的教程安装 传送门:MiniGUI官网 一.配置依赖环境 安装构建工具 apt install binutils aut ...

  6. 我们NetCore下日志存储设计

    日志的分类 首先往大的来说,日志分2种 ①业务日志: 即业务系统需要查看的日志, 常见的比如谁什么时候修改了什么. ②参数日志: 一般是开发人员遇到问题的时候定位用的, 一般不需要再业务系统里展示. ...

  7. 【ORA】ORA-01078和LRM-00109 解决方法

    今天切换到asm实例的时候,发现是一个空实例,尝试启动实例,结果报错ORA-01078和LRM-00109 SQL> startupORA-01078: failure in processin ...

  8. 【ORA】ORA-01033,ORA-09968,ORA-01102

    [oracle@oracle ~]$ imp xxxx/user file=/usr/local/src/666.dmp full=y buffer=40960000 Import: Release ...

  9. 整理目前支持 Vue 3 的 UI 组件库 (2021 年)

    最近,让前端圈子振奋的消息莫过于 Vue 3.0 的发布,一个无论是性能还是 API 设计都有了重大升级的新版本.距离 Vue 3.0 正式版发布已经有一段时间了,相信相关生态周边库也正在适配新版本中 ...

  10. SAP 修改数据元素 注意事项

    在修改数据元素的时候,通常要注意一下几点: 1.在修改完数据元素后,如果激活不成功,那么就要通过SE14进入数据库实用程序,在对象名处输入数据元素相关联的表的名称 下面词典对象选择表,然后点击编辑,处 ...