HDU 6071 Lazy Running(最短路)
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6071
【题目大意】
给出四个点1,2,3,4,1和2,2和3,3和4,4和1 之间有路相连,
现在从2点出发,最后回到2点,要求路径大于等于K,问路径长度最短是多少
【题解】
取一条与2相连的权值最小的边w。
若存在一条从起点到终点的长度为k的路径,
那么必然存在一条长度为k+2w的路径,只要一开始在那条边上往返走就好了。
设dij表示从起点到i,路径长度模2w为j时,路径长度的最小值。
用最短路算法求出所有dij,然后检查d[n][k%2w]是否不超过k即可。
对于求大于等于k的最小解,只要枚举W解不等式即可。
【代码】
#include <cstdio>
#include <cstring>
#include <queue>
#include <utility>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=1000010;
const LL INF=0x3f3f3f3f3f3f3f3f;
typedef pair<LL,int>seg;
priority_queue<seg,vector<seg>,greater<seg> >q;
int head[N],u[N],v[N],w[N],nxt[N],n,m,ed=0;
LL d[5][N],W;
void add(int a,int b,int c){
u[++ed]=a,v[ed]=b,w[ed]=c;
nxt[ed]=head[u[ed]]; head[u[ed]]=ed;
}
void Dijkstra(int src){
for(int i=0;i<=n;i++)for(int j=0;j<W;j++)d[i][j]=INF;
q.push(make_pair(0,src));
while(!q.empty()){
seg now=q.top(); q.pop();
LL _w=now.first;
int x=now.second;
if(_w>d[x][_w%W])continue;
for(int e=head[x];e!=-1;e=nxt[e]){
LL nw=_w+w[e];
if(d[v[e]][nw%W]>nw){
d[v[e]][nw%W]=nw;
q.push(make_pair(nw,v[e]));
}
}
}
}
int T;
LL k,d1,d2,d3,d4;
int main(){
scanf("%d",&T); n=4;
while(T--){
LL ans=INF;
memset(head,-1,sizeof(head));ed=0;
scanf("%lld%lld%lld%lld%lld",&k,&d1,&d2,&d3,&d4);
if(d2<d1)W=2*d2; else W=2*d1;
add(3,4,d3); add(4,3,d3);
add(2,1,d1); add(1,2,d1);
add(2,3,d2); add(3,2,d2);
add(1,4,d4); add(4,1,d4);
Dijkstra(2);
for(int i=0;i<W;i++){
if(k<=d[2][i])ans=min(ans,d[2][i]);
else ans=min(ans,d[2][i]+((k-d[2][i]+W-1)/W)*W);
}printf("%lld\n",ans);
}return 0;
}
HDU 6071 Lazy Running(最短路)的更多相关文章
- hdu 6071 Lazy Running 最短路建模
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) P ...
- HDU 6071 Lazy Running (最短路)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6071 题解 又是一道虐信心的智商题... 首先有一个辅助问题,这道题转化了一波之后就会化成这个问题: ...
- HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4
/* HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4 题意: 四个点的环,给定相邻两点距离, ...
- HDU 6071 Lazy Running (同余最短路 dij)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU 6071 Lazy Running (同余最短路)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU 6071 Lazy Running(很牛逼的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回 ...
- 多校4 lazy running (最短路)
lazy running(最短路) 题意: 一个环上有四个点,从点2出发回到起点,走过的距离不小于K的最短距离是多少 \(K <= 10^{18} 1 <= d <= 30000\) ...
- HDU 6071 同余最短路 spfa
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- 2017 Multi-University Training Contest - Team 4 hdu6071 Lazy Running
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6071 题目: Lazy Running Time Limit: 2000/1000 MS (J ...
随机推荐
- 利用Addon Domain和A记录使两个域名同时指向同一个网站
今天碰到这样的需求:已有网站A.com, 以及新注册的域名B.net, 现需要将B.net指向与A.com相同的内容. 这里提出的方法是在空间后台添加Addon domain, 以及在域名B.net后 ...
- 微信小程序开发定制
上海软件定制专家:http://www.dzonly.com/?from=timeline
- shell脚本执行方式
# BY THE WAY, 其实这块内容算是比较简单的,但是都比较常记得它最基本的两种方式,另外两种却忘记了 1. 利用sh或bash命令执行 sh test.sh bash test.sh 2. 在 ...
- 理解一条语句:SELECT difference(sum("value")) FROM "mq_enqueue" WHERE "channel" =~ /ActiveMQ_TEST/ AND $timeFilter GROUP BY time($interval)
最近使用grafana在查询InfluxDB中,用到了这一条语句 SELECT difference(sum("value")) FROM "mq_enqueue&quo ...
- PYTHON学习(三)之利用python进行数据分析(1)---准备工作
学习一门语言就是不断实践,python是目前用于数据分析最流行的语言,我最近买了本书<利用python进行数据分析>(Wes McKinney著),还去图书馆借了本<Python数据 ...
- LightOJ 1323 Billiard Balls(找规律(蚂蚁爬木棍))
题目链接:https://vjudge.net/contest/28079#problem/M 题目大意: 一个边界长为L宽为W的平面同时发射n个台球,运动K秒,台球碰到桌面及两(多)个台球相撞情况如 ...
- s3cmd : Add a config parameter to enable path-style bucket access 当ceph rgw使用域名时,需要支持 path-style bucket特性
s3cmd 要是1.6.1 之后的版本 增加配置项: vi .s3cfg use_path_mode = True 源码参考: cat /usr/local/lib/python2.7/dist- ...
- MySQL之基础功能
一.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点: 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是 ...
- 怎么修改chrome浏览器的字体
点击“自定义字体”可以修改字体风格. 如果习惯看微软雅黑的字体,我们可以点击“宋体”进入字体选择,拖动向下可以找到“微软雅黑”的字体,点击“微软雅黑”,然后再点击“完成”即可. 另外如果设置字 ...
- Java学习(if wihle switch for语句)
一.if语句 定义:if语句是指如果满足某种条件,就进行某种处理. 语句: if (条件语句){ 执行语句; …… } 上述格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会执 ...