题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

解法:spfa算法。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<queue>
6 using namespace std;
7 typedef long long LL;
8
9 const int N=10010,M=500010;
10 const LL INF=2147483647;
11 int n,m,st,len=0;
12 int vis[N],last[N];
13 LL dis[N];
14 struct edge{int x,y,next;LL d;}a[2*M];
15 queue<int> q;
16
17 void ins(int x,int y,LL d)
18 {
19 a[++len].x=x,a[len].y=y,a[len].d=d;
20 a[len].next=last[x],last[x]=len;
21 }
22 void spfa()
23 {
24 for (int i=1;i<=n;i++) dis[i]=INF;
25 memset(vis,0,sizeof(vis));
26 while (!q.empty()) q.pop();
27 dis[st]=0, vis[st]=1;
28 q.push(st);
29 while (!q.empty())
30 {
31 int x=q.front();
32 q.pop(); vis[x]=0;
33 for (int i=last[x];i;i=a[i].next)
34 {
35 int y=a[i].y;
36 if (dis[x]+a[i].d<dis[y])
37 {
38 dis[y]=dis[x]+a[i].d;
39 if (!vis[y]) vis[y]=1, q.push(y);
40 }
41 }
42 }
43 }
44 int main()
45 {
46 scanf("%d%d%d",&n,&m,&st);
47 int x,y; LL d;
48 memset(last,-1,sizeof(last));
49 for (int i=1;i<=m;i++)
50 {
51 scanf("%d%d%lld",&x,&y,&d);
52 ins(x,y,d);
53 }
54 spfa();
55 for (int i=1;i<=n;i++)
56 printf("%lld ",dis[i]);
57 printf("\n");
58 return 0;
59 }

最新文章

  1. 【JS/CSS3】实现带预览图幻灯片效果~
  2. scrollHeight、scrollTop等的比较
  3. virtualbox创建com对象失败(解决方法)
  4. Unity3d《Shader篇》绘制圆角图片
  5. 20145220java程序设计第九周学习总结
  6. &quot;undefined reference to&quot; 问题解决方法 -链接问题
  7. Java多线程4:synchronized关键字
  8. Java设计模式---工厂方法模式(Factory-Method)
  9. document.styleSheets
  10. php中session的运行机制
  11. PHP之路——PHPStudy虚拟主机
  12. 使用myfocus制作焦点图
  13. Unity修改Particles Render Material(Unity3D开发之二十三)
  14. JavaBean+Servlet 开发时,JavaBean 编写问题
  15. 关于socket.io获取客户端真实IP地址
  16. Android中使用databinding编译时出现的error:Execution failed for task &#39;:app:dataBindingProcessLayoutsDebug&#39;
  17. 【PAT】B1069 微博转发抽奖(20 分)
  18. Enrolment API
  19. golang linux安装
  20. [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆

热门文章

  1. 服务器报错&quot;您的主机中的软件中止了一个已建立的连接&quot;
  2. 攻防世界_MISC进阶区_Get-the-key.txt(详细)
  3. 剑指offer 树的基本操作:四种遍历方式
  4. 一文带你学会AQS和并发工具类的关系
  5. 【栈和队列】2、栈的基本实现 - Java
  6. innnodb_doublewrite
  7. 【ORA】ORA-00257 archiver error. 错误的处理方法
  8. java创建线程安全的类
  9. AOP面向切面编程(使用注解和使用配置文件)
  10. 网络编程 — Linux TCP服务端和客户端