Animals
蒟蒻

SPFA!

关于SPFA,他复活了

#include<bits/stdc++.h>
using namespace std;
int tot,n,s,w[100005],son[100005],next[100005];
int fir[100005],q[100005],vis[100005],d[100005];
void add(int x,int y,int z){
	w[++tot]=z;
	son[tot]=y;
	next[tot]=fir[x];
	fir[x]=tot;
}
void spfa(){
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=10000;i++){
	    d[i]=2147483647;
	}
	int head=0,tail=1;
	q[1]=s,d[s]=0;
	while(head!=tail){
		head=head%n+1;
		int x=q[head];
		vis[x]=0;
		for(int i=fir[x];i;i=next[i]){
			if(d[son[i]]>d[x]+w[i]){
				d[son[i]]=d[x]+w[i];
				if(!vis[son[i]]) tail=tail%n+1,q[tail]=son[i],vis[son[i]]=1;
			}
		}
	}
}
int main(){
	scanf("%d%d%d",&n,&m,&s);
	int a,b,c;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&a,&b,&c);
		add(a,b,c);
	}
	spfa();
	for(int i=1;i<=n;i++){
	    if(i==s) cout<<0<<' ';
	    else{
	        cout<<d[i]<<' ';
	    }
	}
	return 0;
}

  

posted @ 2018-11-02 08:45  年下丶  阅读(154)  评论(0编辑  收藏  举报
--- 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 ---