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  年下丶  阅读(173)  评论(0)    收藏  举报
--- 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 ---