1333: Funny Car Racing(最短路用spfa)
来源:互联网 发布:java jar 运行参数 编辑:程序博客网 时间:2024/06/05 10:32
题目链接:点击打开链接
题目大意:有n个城市,m条街道,
每条街道有5个整数,s,e,open_time,close_time,time;
意思是从s城市到e城市,这条道路回开启open_time,关闭close_time,且你通过这条道 路需要time时间,如果你到达s时道路未开启,你可以等待他开启;
如果你不能在他关闭前到达e,那么你就不能走这条道路;
只是比一般的最短路多了些条件;
直接看代码:
#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{ int u,v,o_t,c_t,w; //u是起始城市,v是终止城市,o_t是开启时间,c_t是关闭时间,w是通过的时间} a[50009];//存储道路信息int first[309],nextt[100000],xia[309];int dp[309];int n,m;//n是城市个数,m是边的个数void spfa(int x,int y)//用spfa,其他的超时{ queue<int>q; q.push(x); memset(xia,0,sizeof(xia)); memset(dp,0x3f3f3f3f,sizeof(dp)); dp[x]=0; xia[x]=1; while(!q.empty()) { int f=q.front(); q.pop(); xia[f]=0; for(int i=first[f]; i!=-1; i=nextt[i]) { if(a[i].w>a[i].o_t) continue;//如果通过这条街道的时间大于这条道路的开启时间,代表根本无法通过; if(a[i].o_t-dp[a[i].u]%(a[i].o_t+a[i].c_t)>=a[i].w)//判断到达s是能否直接通过 { if(dp[a[i].v]>dp[a[i].u]+a[i].w) { dp[a[i].v]=dp[a[i].u]+a[i].w; if(xia[a[i].v]==0) { q.push(a[i].v); xia[a[i].v]=1; } } } else//不能直接通过,需要等待 { int h=a[i].c_t+a[i].o_t+a[i].w-dp[a[i].u]%(a[i].o_t+a[i].c_t);//要等待和通过这条道路的时间 if(dp[a[i].v]>dp[a[i].u]+h) { dp[a[i].v]=dp[a[i].u]+h; if(xia[a[i].v]==0) { q.push(a[i].v); xia[a[i].v]=1; } } } } }}int main(){ int tt=1; int x,y;//求从x到y的最短时间; while(~scanf("%d%d%d%d",&n,&m,&x,&y)) { memset(first,-1,sizeof(first));//用邻接表 for(int i=0; i<m; i++) { scanf("%d%d%d%d%d",&a[i].u,&a[i].v,&a[i].o_t,&a[i].c_t,&a[i].w); nextt[i]=first[a[i].u]; first[a[i].u]=i; } spfa(); printf("Case %d: %d\n",tt++,dp[y]); } return 0;}
0 0
- 1333: Funny Car Racing(最短路用spfa)
- CSU1333 Funny Car Racing(最短路,SPFA)
- CSU 1333: Funny Car Racing 最短路
- 文章标题 csu1333 :Funny Car Racing(最短路 spfa)
- CSU 1333 & Uva 12661 Funny Car Racing【最短路变形+spfa算法,链式前向星建图】
- UVA 12661 Funny Car Racing(最短路)
- COJ1333 Funny Car Racing最短路问题
- Funny Car Racing(最短路)
- 最短路 uva12661 Funny Car Racing
- 12661 - Funny Car Racing (最短路)
- CSUOJ 1333 Funny Car Racing (spfa算法)
- CSU 1333 Funny Car Racing(spfa)
- UVA 12661 Funny Car Racing(最短路)
- UVA 12661 Funny Car Racing(最短路)
- UVA 12661 Funny Car Racing (Dijkstra最短路)
- CSU 1333: Funny Car Racing(SPFA)13年省赛题
- bnu 33971 Funny Car Racing (spfa)
- 2013年湖南省第九届程序设计大赛 F Funny Car Racing(最短路)
- BZOJ P3437 小P的牧场
- 人工智能终究会抢了我们程序员的饭碗
- Liunx 上面使用Python连接Redis遇到的一些问题
- 集合类2-TreeSet
- Windows BAT脚本中调用BAT脚本导致CMD退出的问题
- 1333: Funny Car Racing(最短路用spfa)
- 20170405_shell编程
- Java中的堆栈
- mybatis 获取 list类型的返回值
- easyUI的目录结构
- 结对编程,四则运算
- C++读入优化
- sql进阶-多表查询和复合查询
- Redis学习总结