UVALive-6485-Electric Car Rally(BFS)
题目:点击打开链接
思路:对于当前位置的每个时间段都要走一遍(除了那些须要的时间比最大同意的时间还大的),用 整形 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;
}
}
}
}
}
UVALive-6485-Electric Car Rally(BFS)的更多相关文章
- UVALive 6485 Electric Car Rally (BFS,PQ)
https://icpcarchive.ecs.baylor.edu/index.php? option=com_onlinejudge&Itemid=8&page=show_prob ...
- UVALive 6665 Dragonâs Cruller --BFS,类八数码问题
题意大概就是八数码问题,只不过把空格的移动方式改变了:空格能够向前或向后移动一格或三格(循环的). 分析:其实跟八数码问题差不多,用康托展开记录状态,bfs即可. 代码: #include <i ...
- UVALive 7297 Hounded by Indecision BFS
题目链接:Hounded by Indecision 题意:map中给出小偷的位置,警察的位置.警察有一只狗,开始的时候警察和狗一起行动,也就是看做一个格子,当警察遇见小偷走过的格子时,狗就会嗅到它的 ...
- UVALive 3956 Key Task (bfs+状态压缩)
Key Task 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/D Description The Czech Technica ...
- UVALive 2520 Holedox Moving(BFS+状态压缩)
这个题目在比赛的时候我们是没有做出来的,但是听到他们说进制哈希的时候,感觉真的是挺高端的,于是赛后开始补题,本着我的习惯在看题解之前自己再试着写一遍,我当时存储状态的方法是string + map,我 ...
- UVALive 2035 The Monocycle(BFS状态处理+优先队列)
这道题目真是非常坎坷啊,WA了很多次,但所有的思路都是奔着广搜去想的,一开始出现了比答案大的数据,才想到了应该是优先队列,再说加上也肯定不会错.一开始我读错了题意,以为旋转并且前行需要的时间跟其他一样 ...
- UVALive 6908 Electric Bike dp
Electric Bike 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8 ...
- What a Ridiculous Election UVALive - 7672 (BFS)
题目链接: E - What a Ridiculous Election UVALive - 7672 题目大意: 12345 可以经过若干次操作转换为其它五位数. 操作分三种,分别为: 操作1:交 ...
- UVALive 5066 Fire Drill BFS+背包
H - Fire Drill Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
随机推荐
- 简单的 centos7&rhel7 系统初始化脚本
#!/bin/bash #描述: 基于RHEL7¢os7的初始化配置 #读取用户输入的ip read -p "输入你当前Linux的IP地址:" LAST #截取网 ...
- 一:1.1 python程序与数据储存【进制转换】
二进制 :0 1 [逢二进一]0+0=00+1=11+1=1011+1=100 1 1+ 1------ 100 八进制: 0 1 2 3 4 5 6 7 [逢八进一] 1+7=101+2=3 十进制 ...
- 紫书 例题 10-17 UVa 1639(数学期望+对数保存精度)
设置最后打开的是盒子1, 另外一个盒子剩下i个 那么在这之前打开了n + n - i次盒子 那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i) 那么反 ...
- ArcGIS api for javascript——渲染-计算相等间隔分级
描述 本例展示了如何配置分级渲染使用一个相等间隔分类.在这个分类类型中,断点被设置为相等的距离. 可以手工添加相等距离的断点:然而,如果数据被修改了,那些断点就会是不合理的.本例自动地计算断点,因此相 ...
- 移动App架构设计
移动App架构设计 本文主要总结了几种经常使用的架构模式, 基本是层层递进的转载请注名出处 http://blog.csdn.net/uxyheaven, 良好的排版在https://github.c ...
- Java中Socket上的Read操作堵塞问题
从Socket上读取对端发过来的数据一般有两种方法: 1)依照字节流读取 BufferedInputStream in = new BufferedInputStream(socket.getInpu ...
- h5 图片回显
<form method="post" id="imgForm" action ="/hi/holdHead" enctype=&qu ...
- 记一次httpclient Connection reset问题定位
问题:某业务系统在运行一段时间后,某个API一定概率偶现Connection reset现象. 问题定位: 首先想到的是要本地复现出这个问题,但一直复现不出来. 1.根据线上问题相关日志判断应该是有部 ...
- 解决plsql遇到乱码的问题
遇到问题: PLSQL中汉字显示乱码,并且SQL语句中如果有汉字,则执行时报错.其实并不是SQL语句写的有问题,而是系统不能识别汉字. 解决方法. 首先执行语句 select * from V$NLS ...
- 虚拟摄像头vivi的测试(二)
(前一部分的基础操作来源于作者:LingXiaokai 的 Ubuntu 9.10 下如何使用笔记本摄像头以及虚拟摄像头vivi的测试) 自己仅对实际操作中需要注意的点进行阐述 一.先在Ubuntu ...