P1144 最短路计数
时间:2022-05-10
本文章向大家介绍P1144 最短路计数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。
输入输出格式
输入格式:
输入第一行包含2个正整数N,M,为图的顶点数与边数。
接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。
输出格式:
输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点i则输出0。
输入输出样例
输入样例#1:
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
输出样例#1:
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%的数据,N<=1000000,M<=2000000。
迪杰斯特拉有毒啊,,,
卡了我好长时间。。。。
就是一个裸的最短路问题
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<queue>
6 using namespace std;
7 void read(int & n)
8 {
9 char c='+';int x=0;
10 while(c<'0'||c>'9')c=getchar();
11 while(c>='0'&&c<='9')
12 {
13 x=x*10+c-48;
14 c=getchar();
15 }
16 n=x;
17 }
18 const int MAXN=1000401;
19 const int maxn=0x7fffff;
20 int tot[MAXN];
21 struct node
22 {
23 int u,v,w,nxt;
24 }edge[MAXN*4];
25 int head[MAXN];
26 int num=1;
27 int n,m;
28 int dis[MAXN];
29 int vis[MAXN];
30 struct dian
31 {
32 int bh;
33 int jl;
34 }a[MAXN];
35 void add(int x,int y)
36 {
37 edge[num].u=x;
38 edge[num].v=y;
39 edge[num].w=1;
40 edge[num].nxt=head[x];
41 head[x]=num++;
42 }
43 bool operator <(dian a,dian b){return a.jl>b.jl;}
44 void dj()
45 {
46
47 priority_queue<dian>q;
48 dis[1]=0;
49 vis[1]=1;
50 tot[1]=1;
51 dian now;
52 now.bh=1;
53 now.jl=0;
54 q.push(now);
55 while(q.size()!=0)
56 {
57 dian p=q.top();
58 q.pop();
59 vis[p.bh]=0;
60 if(dis[p.bh]!=p.jl)continue;
61 for(int i=head[p.bh];i!=-1;i=edge[i].nxt)
62 {
63 int will=edge[i].v;
64 if(dis[will]==dis[p.bh]+edge[i].w)
65 {
66 tot[will]=(tot[p.bh]+tot[will])%100003;
67 }
68 if(dis[will]>dis[p.bh]+edge[i].w)
69 {
70 dis[will]=dis[p.bh]+edge[i].w;
71 tot[will]=(tot[p.bh])%100003;
72 if(vis[will]==0)
73 {
74 dian nxt;
75 nxt.bh=will;
76 nxt.jl=dis[will];
77 q.push(nxt);
78 vis[will]=1;
79 }
80 }
81 }
82 }
83
84 }
85 int main()
86 {
87 read(n);read(m);
88 for(int i=1;i<=n;i++)
89 dis[i]=maxn,head[i]=-1;
90 for(int i=1;i<=m;i++)
91 {
92 int x,y;
93 read(x);read(y);
94 add(x,y);add(y,x);
95 }
96 dj();
97 for(int i=1;i<=n;i++)
98 printf("%dn",tot[i]);
99 return 0;
100 }
- 常见排序算法-Python实现
- 免费域名与收费域名的差别有哪些?
- c++学习笔记之封装篇(上)
- c++学习笔记之继承篇
- c++学习笔记之继承篇
- silverlight:对象拖动的优雅解决方案
- Silverlgiht:快速去除/恢复对象的颜色
- deepin系统下如何设置wifi热点(亲测有效)
- Silverlight单元测试
- Silverlight:页面/控件继承的二种写法
- java学习:Hibernate入门
- Silverlight Telerik控件学习:GridView双向绑定
- XmlWriter/XmlReader示例代码
- Silverlight Telerik控件学习:RadComboBox之自动完成(AutoComplete)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 大点干!早点散----------LVS负载均衡之LVS-NAT部署实战
- 大点干!早点散----------负载均衡LVS-DR群集部署
- 大点干!早点散----------群集负载均衡LVS DR+keepalived部署实战
- Java字符串所占字节数的小总结
- Java类加载机制详解
- 详解Java注解(Annotation)
- 你不知道的Synchronized
- 从Java并发集合看锁优化策略
- Java常用并发容器总结(二)
- Java常用并发容器总结(一)
- Java常用并发容器总结(三)
- Java常用并发容器总结(四)
- Js常见点击跳转方式
- Js获取域名地址并截取
- 引用lib-flexible导致第三方Ui库缩小