hdu_2544_最短路(spfa版子)
2024-08-23 19:19:05
题目连接:hdu_2544_最短路
存个自己写的SPFA的板子
#include<cstdio>
#include<cstring>
#define mst(a,b) memset(a,b,sizeof(a))
#define F(i,a,b) for(int i=a;i<=b;i++) const int N=,inf=<<;
int g[N],v[N*],nxt[N*],w[N*],ed,d[N],in[N],cnt[N],Q[N];
inline void adg(int x,int y,int z){v[++ed]=y,w[ed]=z,nxt[ed]=g[x],g[x]=ed;} bool spfa(int S,int n,int hd=,int tl=){//S为源点,n为点数
F(i,,n)d[i]=inf;
mst(cnt,),mst(in,),cnt[S]=,Q[++tl]=S,d[S]=;
for(int x,i;hd<=tl;)for(i=g[x=Q[hd++]],in[x]=;i;i=nxt[i])
if(d[v[i]]>d[x]+w[i]){
d[v[i]]=d[x]+w[i];
if(!in[v[i]]){
in[v[i]]=,d[v[i]]<d[Q[hd]]?Q[--hd]=v[i]:Q[++tl]=v[i];//SLF优化
if(++cnt[v[i]]>n)return ;//有负环
}
}
return ;
} int n,m;
int main(){
while(scanf("%d%d",&n,&m),n+m){
mst(g,),ed=;
int x,y,z;
F(i,,m)scanf("%d%d%d",&x,&y,&z),adg(x,y,z),adg(y,x,z);
spfa(,n),printf("%d\n",d[n]);
}
return ;
}
最新文章
- javascript动画系列第一篇——模拟拖拽
- 报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.
- TCP/IP, WebSocket 和 MQTT
- C# 将PowerPoint文件转换成PDF文件
- WinForm DataGridView根据选中的行多删
- ios xcode 下 报出 ”xx“is missing from working copy 的问题
- smarty中math函数的用法
- ThinkPHP讲解(五)——数据库配置及Model数据模型层、查询
- 时间格式nls_date_format的设置
- Mac OSX下面的博客客户端Marsedit使用
- 在 Windows 上测试 Redis Cluster的集群填坑笔记
- 项目总结一:响应式之CSS3 媒体查询
- TCP的核心系列 — ACK的处理(二)
- C语言之实现随机数产生算法
- vue 双向数据绑定原理
- pytest 12 函数传参和fixture传参数request
- Flex(ActionScript)与JavaScript交互的两种方式示例
- Peer Programming Project: 4 Elevators Scheduler 附加题 157 165
- CSS VISUAL RULES
- element-ui 日期选择范围限制,只允许选择上下浮动一个月内的日期