题目:

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

                                              ——传送门

受到题解的启发,用 Dijkstra A掉(手工代码)

思路:

  1.无向无权图,建图的时候别忘记建来回的有向边

  2.无权,那么边长建成1就好了

  3.最短路采用 Dijkstra(堆优化)来做,计数操作改装进去,tot[1]=1;用 Dijkstra 更新边长的时候如果大于号(具体见代码)就覆盖,相等的话就加上。

AC代码:

#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
#include<set>
#include<map>
#include<vector>
#include<fstream>
using namespace std;
#define maxn 2000005
#define mod 100003
int head[maxn],vis[maxn],d[maxn],tot[maxn];
int cnt=,n,m,s;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
struct hh
{
int nex,to;
}t[maxn<<];
inline void add(int nex,int to)
{
t[++cnt].nex=head[nex];
t[cnt].to=to;
head[nex]=cnt;
}
inline int read()
{
char kr=;
char ls;
for(;ls>''||ls<'';kr=ls,ls=getchar());
int xs=;
for(;ls>=''&&ls<='';ls=getchar())
{
xs=xs*+ls-;
}
if(kr=='-') xs=-xs;
return xs;
}
inline void dijkstra()
{
memset(d,0x3f,sizeof(d));
memset(tot,,sizeof(tot));
memset(vis,,sizeof(vis));
q.push(make_pair(,));
d[]=;
vis[]=;
tot[]=;
while(!q.empty())
{
int u=q.top().second;
q.pop();
vis[u]=;
for(int v=head[u];v;v=t[v].nex)
{
if(d[t[v].to]>d[u]+)
{
d[t[v].to]=d[u]+;
tot[t[v].to]=tot[u];
if(!vis[v])
{
q.push(make_pair(d[t[v].to],t[v].to));
vis[v]=;
}
continue;
}
else if(d[t[v].to]==d[u]+)
{
tot[t[v].to]+=tot[u];//tot记录的是点上的数,不是边上。(查了好久)
tot[t[v].to]%=mod;
continue;
}//关键是这两个 if 语句,其它的跟单源最短路没什么区别
}
}
}
int main()
{
n=read();m=read();
int x,y;
for(int i=;i<=m;i++)
{
x=read();y=read();
add(x,y);
add(y,x);
}
dijkstra();
for(int i=;i<=n;i++)
{
printf("%d\n",tot[i]);
}
return ;
}

最新文章

  1. HTML5与CSS3经典代码
  2. ServletConfig对象和它在开发中的应用场
  3. git clone 错误ca-certificates.crt
  4. for循环的嵌套,for循环的穷举迭代
  5. ApplicationContext.xml 的最终xml声明,包括注解 aop
  6. 将listBox中信息显示在dataGridview中,操作datagridview后删除listBox信息和SQL数据库信息 续(浅谈listBox..)
  7. Samba通过ad域进行认证并限制空间大小《转载》
  8. [转载自 文顶顶]iOS开发UI篇—程序启动原理和UIApplication
  9. springboot添加swagger2组件
  10. java扫盲 接口 Enumeration
  11. ListFiles():返回Files类型数组,可以用getName()来访问到文件名。
  12. export及export default的区别
  13. SQL语句简单笔记
  14. Redis---事务和Wtach
  15. [ACM] hdu 1253 胜利大逃亡 (三维BFS)
  16. Unity3D-RPG项目实战(4):角色性能測试
  17. 【小甲鱼】【Python】正则表达式(二)
  18. String内存分析,for-each,参数传递
  19. [ios]ios tts的使用
  20. java swing:文本框添加滚动条

热门文章

  1. 怎样理解JAVA的“构造方法”和“主方法”
  2. 20175320 2018-2019-2 《Java程序设计》第5周学习总结
  3. (四)juc线程高级特性——线程池 / 线程调度 / ForkJoinPool
  4. [java] 在linux+chrome/firefox上使用java applet
  5. 1.认识Wireshark的主窗口界面(转)
  6. 监听器&amp;上传下载&amp;I18N
  7. 钉钉调试应用Inspect不显示或显示空白的解决方法
  8. 50.JQ---jQuery 常用小技巧
  9. 《linux就该这么学》第四节课笔记,三章和四章开始!
  10. linux----------阿里云服务器使用过程中遇到的各种问题以及解决渠道