spfa求助,WA最后2个点
查看原帖
spfa求助,WA最后2个点
114206
111l楼主2020/8/19 09:45

rt,一年前的题翻出来还是不会

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct e{int v,w;};
vector<e> g[10001];
int n,m,d[10001],p[10001],inq[10001],tir[10001];
queue<int> q;
void out(int x){
	if(!x) return;
	out(p[x]);
	printf("%d ",x);
}
int main(){
	memset(d,127,sizeof(d));
	scanf("%d%d",&n,&m);
	for(int i=1,a,b,c;i<=m;i++){
		scanf("%d%d%d",&a,&b,&c);
		g[a].push_back({b,c});
	}
	d[1]=0;
	q.push(1);
	inq[1]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		inq[u]=0;
		for(auto v:g[u]){
			if(d[v.v]>d[u]+v.w+tir[u]){
				d[v.v]=d[u]+v.w+tir[u];
				p[v.v]=u,tir[v.v]=tir[u]+1;
				if(!inq[v.v]) q.push(v.v),inq[v.v]=1;
			}
		}
	}
	printf("%d\n",d[n]);
	out(n);
}
2020/8/19 09:45
加载中...