#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; }
codevs 2645 Spore SPFA c++
最新推荐文章于 2024-08-02 12:01:18 发布