hdu-1874 SPFA

来源:互联网 发布:卡盟系统控制端php源码 编辑:程序博客网 时间:2024/06/05 11:16

noip day1 少得100分,看错题了。。。

/* * hdu-1874 SPFA * mike-w * 2011-11-12 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 500#define MAXM 5000#define QSIZE 5000#define INF 999999typedef struct _lnode{int node,weight,next;}lnode;int hhead[MAXN],ID;int que[MAXN],inq[MAXN],head,tail,len;lnode list[MAXM];int M,N,S,T;int d[MAXN];int push(int e){que[tail++]=e;len++;if(tail==QSIZE)tail=0;return 0;}int pop(int *e){*e=que[head++];len--;if(head==QSIZE)head=0;return 0;}int insert(int start,int end,int weight){int pos,nxt;if(hhead[start]==-1){pos=hhead[start]=ID++;list[pos].node=end;list[pos].weight=weight;list[pos].next=-1;}else{pos=hhead[start];nxt=list[pos].next;pos=list[pos].next=ID++;list[pos].node=end;list[pos].weight=weight;list[pos].next=nxt;}return 0;}int SPFA(void){int i,x,pos;head=tail=len=0;for(i=0;i<N;i++){inq[i]=head=tail=len=0;d[i]=INF;}push(S);inq[S]=1;d[S]=0;while(len>0){pop(&x);inq[x]=0;for(pos=hhead[x];pos!=-1;pos=list[pos].next){if(d[x]+list[pos].weight<d[list[pos].node]){d[list[pos].node]=d[x]+list[pos].weight;if(!inq[list[pos].node])push(list[pos].node),inq[list[pos].node]=1;}}}if(d[T]==INF)return -1;elsereturn d[T];}int main(void){int i,t1,t2,t3;#ifndef ONLINE_JUDGEfreopen("in","r",stdin);#endifwhile(scanf("%d%d",&N,&M)!=EOF){for(i=0;i<=N;i++)hhead[i]=-1;ID=0;for(i=1;i<=M;i++){scanf("%d%d%d",&t1,&t2,&t3);insert(t1,t2,t3);insert(t2,t1,t3);}scanf("%d%d",&S,&T);printf("%d\n",SPFA());}return 0;}


 

原创粉丝点击