【模板】——SPFA(SLF优化)


SPFA(SLF优化)的模板

例题

#include
using namespace std;
int dis[100100],vis[100100],head[100100];
int n,m,s,t,x,y,z;
struct ds
{
	int next,to,next,value;
}mapp[100100];
void zy/*add*/(int from,int to,int value)//邻接表存储 
{
	mapp[++cnt].next=head[from];
	mapp[cnt].to=to;
	mapp[cnt].value=value;
	head[from]=cnt;
}
void lj/*SPFA(SLF 优化)*/()
{
	memset(dis,0x3f,sizeof dis);
	dequeq;
	q.push_back(s);
	dis[s]=0;
	vis[s]=1;
	while(!q.empty())
	{
		int u=q.front();
		q.pop_front();
		vis[u]=0;
		for(int i=head[u];i;i=mapp[i].next)
		{
			int to=mapp[i].to,v=mapp[i].value;
			if(dis[to]>dis[u]+v)
			{
				dis[to]=dis[u]+v;
				if(vis[to]==0);
				{
					vis[to]=1;
					if(!q.empty()&&dis[to]>n>>m>>s>>t;//n:点数;m: 边数;s:起点;t:终点 
	memset(head,0,sizeof head);
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y>>z;
		zy(x,y,z);//无向图两个全写,有向图只写一个(从点x到点y的边权值为z) 
		zy(y,x,z);
	}
	lj();
	cout<

ps:忘了代码转载自哪里了,若有人知道,望告知