LOJ10077
题目描述
给出一个 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的更多相关文章
随机推荐
- 两个字搞定DDD(领域驱动设计),DDD脱水版(一)修订版
摘自微信公众号丁辉的软件架构说
- Linux介绍及系统安装
1.Linux入门介绍 1.1简介 Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(Portable Operating System In ...
- 数据仓库组件:Hive环境搭建和基础用法
本文源码:GitHub || GitEE 一.Hive基础简介 1.基础描述 Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取.转化.加载,是一个可以对Hadoop中的大规模存储的数据进 ...
- 第六章节 BJROBOT 动态导航壁障
导航前说明:一定要确保你小车在构建好地图的基础上进行! 1.把小车平放在你想要构建地图区域的地板上,打开资料里的虚拟机,打开一个终端, ssh 过去主控端启动 roslaunch znjrobot b ...
- WEB安全讨论-表单登录是先验证验证码还是密码
表单登录是先验证验证码还是密码? 肯定是验证码呀!!!这是毋庸置疑的.但是发现有人会验证密码,感觉先验证密码和先验证验证码是一个概念是一样的.但是其实是完全不一样的.下面我们来一起详细的剖析一下: 消 ...
- 在Docker下进行MyCAT管理双主双从MySQL集群
前言 在Docker下双主双从MySQL集群模拟 https://www.cnblogs.com/yumq/p/14259964.html 本文实验配置文件 Docker拉取MyCAT镜像 如果没启动 ...
- 使用javafx开发一款桌面个性化软件
本来笔者只是打算开发一个显示在桌面的cpu和内存监控工具,没想到迭代了几次版本之后变成了桌面个性化工具了. 目前实现功能: cpu和内存的实时监控 开机自动启动 自定义logo 自定义主题颜色 鼠标拖 ...
- Laya 断点调试
Laya 打断点调试并查看堆栈的方法 发现直接加断点不行没办法调试,直接使用这中方法好像可以,选择F5调试 var camera =this.GameScene.getChildByName(&quo ...
- 行业动态 | 利用Cassandra数据库揭开家族祖先的秘密
FamilySearch选择了基于Apache Cassandra的DataStax Enterprise (DSE)来加速用户增长,并通过更快的反应时间.高可用性以及零数据库宕机来提供强大的 ...
- zabbix_agent items not supported状态
不记得自己究竟更改了什么东西,然后突然发现所有的有关mysql的监控items都变成了not supported,怎么做不行,最后在web主页把主机删除,又重新添加一下,重新添加了一下模版就好了.这究 ...