codevs 2645 Spore SPFA c++

来源:互联网 发布:淘宝微海报在哪里展示 编辑:程序博客网 时间:2024/06/15 01:49
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,m,flag;int dis[1001],fh[1001],d[100001],pd[1001][1001];int et,head[20001],to[20001],c[20001],next[20001];void insert(int u,int v,int w){et++;to[et]=v;c[et]=w;next[et]=head[u];head[u]=et;}void spfa(){int t=0,w=1,p;dis[1]=0;d[0]=1;fh[1]++;while(t<w){p=head[d[t]];while(p!=0){if(dis[d[t]]+c[p]<dis[to[p]]){dis[to[p]]=dis[d[t]]+c[p];          d[w++]=to[p];fh[to[p]]++;if(fh[to[p]]>n){cout<<"No such path";flag=1;return;}} p=next[p];}t++;}}int main(){int x,y,a1,a2;while(cin>>n>>m){if(n==0&&m==0)break;et=0,flag=0;memset(fh,0,sizeof(fh));memset(pd,0,sizeof(pd));memset(next,0,sizeof(next));memset(head,0,sizeof(head));        for(int i=1;i<=m;i++)        {        cin>>x>>y>>a1>>a2;        insert(x,y,a1);insert(y,x,a2);        pd[x][y]=pd[y][x]=1;        }        for(int i=1;i<=n;i++)dis[i]=999999;spfa();if(!flag){if(dis[n]==999999)cout<<"No such path";else cout<<dis[n];}cout<<endl;}    return 0;}