题目:点击打开链接

思路:对于当前位置的每个时间段都要走一遍(除了那些须要的时间比最大同意的时间还大的),用 整形 vis[当前位置][剩余油量] 标记。

#include <cstdio>
#include <queue>
#include <algorithm>
#define INF 999999999
using namespace std; struct S{
int pos,time,remain; bool operator<(const S &p) const
{
return time>p.time;
} }t,oldt; int st[500][500][20],et[500][500][20],jt[500][500][20],head[500],nxt[2000],vis[500][2405],e[2000]; int main()
{
int n,m,i,j,a,b,u,v,time; while(scanf("%d%d",&n,&m) && n+m)
{
for(i=0;i<n;i++) head[i]=-1; for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b); nxt[i*2]=head[a];
head[a]=i*2; nxt[i*2+1]=head[b];
head[b]=i*2+1; e[i*2]=b;
e[i*2+1]=a; for(j=0;;j++)
{
scanf("%d%d%d",&u,&v,&time); u*=10;
v*=10;
time*=10; st[a][b][j]=st[b][a][j]=u;
et[a][b][j]=et[b][a][j]=v;
jt[a][b][j]=jt[b][a][j]=time; if(v==14390) break;
}
} t.time=7200;
t.pos=0;
t.remain=2400; priority_queue<S>que; que.push(t); for(i=0;i<n;i++) for(j=0;j<2405;j++) vis[i][j]=INF; vis[0][t.remain]=t.time; while(!que.empty())
{
t=que.top(); if(t.pos==n-1)
{
printf("%d\n",(t.time-7200)/10); break;
} que.pop(); oldt=t; for(i=head[oldt.pos];i!=-1;i=nxt[i])
{
for(j=0;;j++)
{
if(jt[oldt.pos][e[i]][j]>2400)
{
if(et[oldt.pos][e[i]][j]<14390) continue;
else break;
} t.pos=e[i]; if(oldt.remain>=jt[oldt.pos][e[i]][j])//假设油足够
{
t.time=oldt.time;
t.remain=oldt.remain;
}
else//假设油不够,先加够再说
{
t.time=oldt.time+(jt[oldt.pos][e[i]][j]-oldt.remain)*2;
t.remain=jt[oldt.pos][e[i]][j];
} if(t.time%14400<st[oldt.pos][e[i]][j])
{
t.remain+=(st[oldt.pos][e[i]][j]-t.time%14400)/2;
if(t.remain>2400) t.remain=2400;
t.time+=st[oldt.pos][e[i]][j]-t.time%14400;
}
else if(t.time%14400>et[oldt.pos][e[i]][j])
{
t.remain+=(14400+st[oldt.pos][e[i]][j]-t.time%14400)/2;
if(t.remain>2400) t.remain=2400;
t.time+=14400+st[oldt.pos][e[i]][j]-t.time%14400;
} t.time+=jt[oldt.pos][e[i]][j];
t.remain-=jt[oldt.pos][e[i]][j]; if(t.time<vis[t.pos][t.remain])
{
que.push(t); vis[t.pos][t.remain]=t.time;
} if(et[oldt.pos][e[i]][j]==14390) break;
}
}
}
}
}

最新文章

  1. iOS之App Store上架被拒Legal - 5.1.5问题
  2. 在DevExpress程序中使用TeeList控件以及节点查询的处理
  3. Python 学习小结
  4. Noip2000 T3 单词接龙
  5. 自学silverlight 5.0
  6. 【Linux】linux经常使用基本命令
  7. java自学者的福音
  8. 能量项链AC了
  9. sql语句操作表
  10. 【集美大学1411_助教博客】个人作业3——个人总结(Alpha阶段) 成绩
  11. 第一册:lesson sixty one.
  12. [转]kaldi特征和模型空间转换
  13. CentOS中环境变量和配置文件
  14. AIX 5335端口IBM WebSphere应用服务器关闭连接信息泄露漏洞的修复
  15. C++学习(三十四)(C语言部分)之 链表
  16. JSP的九个隐式对象
  17. 【手把手教你树莓派3 (二)】 启动wifi模块
  18. HTTP协议中TCP的三次握手 and HTTPS
  19. from setuptools import setup, find_packages ImportError: No module named set
  20. [Android] osx下如何使用SublimeText阅读Android系统源码

热门文章

  1. NodeJS代码调试
  2. 20180929 北京大学 人工智能实践:Tensorflow笔记08
  3. 紫书 例题 10-16 UVa 12230(数学期望)
  4. [HNOI2012]矿场搭建(割点)
  5. Opencv 三次样条曲线(Cubic Spline)插值
  6. C++关于二进制位操作小结
  7. Python(二) 表示‘组’的概念与定义
  8. Installation from source on Windows 7 with Visual C++2012
  9. 学习总结--Dom
  10. OpenSUSE Leap 42.3 安装java(Oracle jre)