【洛谷 p3371】模板-单源最短路径(图论)
2024-08-24 12:46:23
题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
解法: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 }
最新文章
- 【JS/CSS3】实现带预览图幻灯片效果~
- scrollHeight、scrollTop等的比较
- virtualbox创建com对象失败(解决方法)
- Unity3d《Shader篇》绘制圆角图片
- 20145220java程序设计第九周学习总结
- ";undefined reference to"; 问题解决方法 -链接问题
- Java多线程4:synchronized关键字
- Java设计模式---工厂方法模式(Factory-Method)
- document.styleSheets
- php中session的运行机制
- PHP之路——PHPStudy虚拟主机
- 使用myfocus制作焦点图
- Unity修改Particles Render Material(Unity3D开发之二十三)
- JavaBean+Servlet 开发时,JavaBean 编写问题
- 关于socket.io获取客户端真实IP地址
- Android中使用databinding编译时出现的error:Execution failed for task &#39;:app:dataBindingProcessLayoutsDebug&#39;
- 【PAT】B1069 微博转发抽奖(20 分)
- Enrolment API
- golang linux安装
- [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆
热门文章
- 服务器报错";您的主机中的软件中止了一个已建立的连接";
- 攻防世界_MISC进阶区_Get-the-key.txt(详细)
- 剑指offer 树的基本操作:四种遍历方式
- 一文带你学会AQS和并发工具类的关系
- 【栈和队列】2、栈的基本实现 - Java
- innnodb_doublewrite
- 【ORA】ORA-00257 archiver error. 错误的处理方法
- java创建线程安全的类
- AOP面向切面编程(使用注解和使用配置文件)
- 网络编程 — Linux TCP服务端和客户端