poj 3594 Escort of Dr. Who How 最短路spfa
2014-11-21 22:41
253 查看
题意:
求一个有向图中s到t的最短路,特别的是每条路除了花费时间还有开放时间区间,只有在开放时间区间内才能使用这条路。
分析:
直接用spfa求最短路即可,需要注意的是因为最后所求最短时间是从离开s开始算,所以要枚举离开s的时间。
代码:
求一个有向图中s到t的最短路,特别的是每条路除了花费时间还有开放时间区间,只有在开放时间区间内才能使用这条路。
分析:
直接用spfa求最短路即可,需要注意的是因为最后所求最短时间是从离开s开始算,所以要枚举离开s的时间。
代码:
//poj 3594 //sepNINE #include <iostream> #include <queue> using namespace std; const int maxN=128; const int maxM=1024; int n,e,s,d,m; int head[maxN],arrive[maxN],inq[maxN]; queue<int> Q; struct Edge{ int v,st,et,t,next; }edge[maxM]; void addEdge(int x,int y,int st,int et,int t) { edge[e].v=y;edge[e].st=st;edge[e].et=et;edge[e].t=t; edge[e].next=head[x];head[x]=e++; } int spfa(int time) { int i,j,k,ans=INT_MAX; for(i=1;i<=n;++i) arrive[i]=INT_MAX; while(!Q.empty()) Q.pop(); memset(inq,0,sizeof(inq)); arrive[s]=time; Q.push(s); inq[s]=1; while(!Q.empty()){ int u=Q.front(); Q.pop(); inq[u]=0; for(i=head[u];i!=-1;i=edge[i].next){//贪心,每个点都争取最小的到达时间,若对u有两个arrive值arr1,arr2且arr1<arr2,则arr1的更新空间肯定大于包含arr2的更新空间,故在每个点贪心地选择较小的arrive值。 int v=edge[i].v,st=edge[i].st,et=edge[i].et,t=edge[i].t; if(arrive[u]>=st){ if(arrive[u]+t<=et&&arrive[u]+t<arrive[v]){ arrive[v]=arrive[u]+t; if(inq[v]==0){ inq[v]=1; Q.push(v); } } } else{//arrive[u]<st 要等到st才能走 if(st+t<=et&&st+t<arrive[v]){ arrive[v]=st+t; if(inq[v]==0){ inq[v]=1; Q.push(v); } } } } } if(arrive[d]==INT_MAX) return INT_MAX; else return arrive[d]-time; } int main() { scanf("%d%d%d%d",&n,&m,&s,&d); e=0; memset(head,-1,sizeof(head)); int mint=INT_MAX,maxt=-1; while(m--){ int x,y,st,et,t; scanf("%d%d%d%d%d",&x,&y,&st,&et,&t); if(t<=et-st){ addEdge(x,y,st,et,t); if(x==s){ mint=min(mint,st); maxt=max(maxt,st); } } } int ans=INT_MAX; for(int i=mint;i<=maxt;++i){ int tmp=spfa(i); if(tmp==INT_MAX) break; ans=min(ans,tmp); } if(ans==INT_MAX) printf("Impossible\n"); else printf("%d\n",ans); return 0; }
相关文章推荐
- [POJ 3594] Escort of Dr. Who How [最短路]
- POJ 3594 Escort of Dr. Who How【最短路径Dij + 枚举】
- POJ 3594 Escort of Dr. Who How(最短路+枚举)
- Escort of Dr. Who How
- POJ 3594 带限制的最短路 枚举+SPFA
- hdu 1595 find the longest of the shortest(最短路spfa)
- POJ2394 dijksta||spfa求最短路
- poj 3328(spfa)多终点多起点的最短路
- [最短路]POJ 3594 Escort of Dr. Who How#最短路+枚举
- POJ2949-平均最短路SPFA
- POJ 2449第K短路(A*+spfa)
- POJ 2449 第K短路 SPFA+A*
- POJ 2449 Remmarguts' Date 第K短路 A* + SPFA
- POJ 1847 Tram --set实现最短路SPFA
- poj 1502--MPI Maelstrom (最短路spfa)
- poj 2449 求第k最短路 A* + SPFA
- POJ3635 周游诸城:变形的SPFA/Dijkstra最短路+动规思想+Heap
- 金华邀请赛B题poj 4046(spfa求最短路)
- poj 2449( k 短路 spfa+A*来求解)
- POJ1511 SPFA模版 用边存的最短路