题目描述
给出一个 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. msf ms17-010利用笔记

    nmap -sV -Pn xxxxx  扫描端口and系统信息 use auxiliary/scanner/smb/smb_ms17_010   扫描模块 set Rhosts 扫描目标 use ex ...

  2. 对CAS中atomicInteger实现的思考

    p.p1 { margin: 0; font: 11px Monaco } span.s1 { color: rgba(147, 26, 104, 1) } span.s2 { color: rgba ...

  3. 聊一聊这个总下载量3603w的xss库,是如何工作的?

    上篇文章这一次,彻底理解XSS攻击讲解了XSS攻击的类型和预防方式,本篇文章我们来看这个36039K的XSS-NPM库(你没有看错就是3603W次, 36039K次,36,039,651次,数据来自h ...

  4. 一行 CSS 代码的魅力

    之前在知乎看到一个很有意思的讨论 一行代码可以做什么? 那么,一行 CSS 代码又能不能搞点事情呢? CSS Battle 首先,这让我想到了,年初的时候沉迷的一个网站 CSS Battle .这个网 ...

  5. JVM内存模型总结,有各版本JDK对比、有元空间OOM监控案例、有Java版虚拟机,综合实践学习!

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

  6. kafka如何保证消息得顺序性

    1. 问题 比如说我们建了一个 topic,有三个 partition.生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到 ...

  7. Nginx解决前端访问资源跨域问题

    被前端跨域问题折磨快2天后,终于用ngnx的方式解决了,所以在此总结下. 该篇只探讨如何用Ngnx解决跨域问题,对于原理不作讨论. 1.首先介绍Windows环境下Nignx的相关命令操作 nginx ...

  8. Oracle误删数据的恢复

    Oracle误删数据的恢复,分为两种方法:SCN和时间戳两种方法恢复. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的SCN号 select current_scn from v$data ...

  9. DTCC 2020 | 阿里云李飞飞:云原生分布式数据库与数据仓库系统点亮数据上云之路

    简介: 数据库将面临怎样的变革?云原生数据库与数据仓库有哪些独特优势?在日前的 DTCC 2020大会上,阿里巴巴集团副总裁.阿里云数据库产品事业部总裁.ACM杰出科学家李飞飞就<云原生分布式数 ...

  10. .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记

    2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...