萌新求助SPFA
查看原帖
萌新求助SPFA
285373
BlachSnake楼主2021/3/4 13:10
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f3f3f3f3fll
#define int long long
using namespace std;
const int N=131072,M=262144;
struct lsqxx{
	int nxt,to,w;
}e[M];
int tot,h[N],d[N];
bool b[N];
queue<int>q;
void ade(int x,int y,int z){
	e[++tot]=(lsqxx){h[x],y,z};
	h[x]=tot;
}
void SPFA(int s){
	memset(d,63,sizeof(d));
	d[s]=0;
	int x,y,z;
	q.push(s);
	while(!q.empty()){
		x=q.front();
		q.pop();
		b[x]=0;
		for(int i=h[x];~i;i=e[i].nxt){
			y=e[i].to;
			z=e[i].w;
			if(d[y]>d[x]+z){
				d[y]=d[x]+z;
				if(!b[y])q.push(y);
			}
		}
	}
}
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	memset(h,255,sizeof(h));
	int n,m,x,y,z;
	cin>>n>>m;
	while(m--)cin>>x>>y>>z,ade(x,y,z),ade(y,x,z);
	SPFA(1);
	for(int i=2;i<=n;i++)cout<<(d[i]<inf?d[i]:-1)<<' ';
	return 0;
}

RT,样例一直输出"2 4 1 5",Dijkstra也试过了,但就是不对……

各位大佬求调QwQ

2021/3/4 13:10
加载中...