/*
HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4
题意:
四个点的环,给定相邻两点距离,问从2号点出发,2号点结束,距离大于k的最短距离
d(i,j) < 30000, k <= 1e18
分析:
设 r = min(d(1,2), d(2,3))
假设距离 k 可达,则 k+2*r 也可达(来回走的形式)
故求出所有 d[i][j] 满足 d[i][j]%2r == j 的最短距离
然后对于每一个d[2][j] 求出 d[2][j] + x*(2r) >= k 的第一个数
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const LL INF = (LL)(1e18)+5;
struct qnode {
int v; LL c;
qnode(int v = 0, LL c = 0) : v(v), c(c) {}
bool operator < (const qnode & r) const {
return c > r.c;
}
};
struct Edge {
int v; LL c;
Edge(int v = 0, LL c = 0) : v(v), c(c) {}
};
vector<Edge> edge[5];
bool vis[5][60005];
LL dist[5][60005];
priority_queue<qnode> que;
void Dijkstra(int r)
{
while (!que.empty()) que.pop();
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= 4; i++)
for (int j = 0; j <= r; j++) dist[i][j] = INF;
dist[2][0] = r;
que.push(qnode(2, 0));
while (!que.empty())
{
auto tmp = que.top(); que.pop();
int u = tmp.v;
LL w = tmp.c;
if (vis[u][w%r]) continue;
vis[u][w%r] = 1;
for (const auto& e : edge[u])
{
LL c = w + e.c;
if (!vis[e.v][c%r] && dist[e.v][c%r] > c)
{
dist[e.v][c%r] = c;
que.push(qnode(e.v, c));
}
}
}
}
void addedge(int u, int v, LL w)
{
edge[u].push_back(Edge(v, w));
edge[v].push_back(Edge(u, w));
}
LL k, d[5], r;
int main()
{
int t; scanf("%d", &t);
while (t--)
{
for (int i = 1; i <= 4; i++) edge[i].clear();
scanf("%lld", &k);
for (int i = 1; i <= 4; i++) scanf("%lld", &d[i]);
r = 2*min(d[1], d[2]);
addedge(1, 2, d[1]); addedge(1, 4, d[4]);
addedge(2, 3, d[2]); addedge(3, 4, d[3]);
Dijkstra(r);
LL ans = k+r;
for (int i = 0; i < r; i++)
{
if (dist[2][i] == INF) continue;
if (dist[2][i] >= k)
{
ans = min(ans, dist[2][i]);
}
else
{
LL s = k-dist[2][i];
LL l = ((s-1)/r+1) * r + dist[2][i];
ans = min(ans, l);
}
}
printf("%lld\n", ans);
}
}

  

HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4的更多相关文章

  1. hdu 6071 Lazy Running 最短路建模

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) P ...

  2. HDU 6071 Lazy Running (同余最短路 dij)

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  3. HDU 6071 Lazy Running (同余最短路)

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  4. HDU 6071 Lazy Running(很牛逼的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回 ...

  5. 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 之间有路相连, 现在 ...

  6. HDU 6071 Lazy Running (最短路)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6071 题解 又是一道虐信心的智商题... 首先有一个辅助问题,这道题转化了一波之后就会化成这个问题: ...

  7. HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9

    /* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问 ...

  8. hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)

    OO's Sequence                                                          Time Limit: 4000/2000 MS (Jav ...

随机推荐

  1. 大数据学习笔记【一】:Hadoop-3.1.2完全分布式环境搭建(Windows 10)

    一.前言 Hadoop原理架构本人就不在此赘述了,可以自行百度,本文仅介绍Hadoop-3.1.2完全分布式环境搭建(本人使用三个虚拟机搭建). 首先,步骤: ① 准备安装包和工具: hadoop-3 ...

  2. Pebbles HDU 2167

    Pebbles HDU 2167 大意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出. 思路:和炮兵阵地那一题有点像,但我们只需要考虑上一行的情况,这 ...

  3. Linux:删除一个目录下的所有文件,但保留一个指定文件

    面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件 [root@oldboy xx]# touc ...

  4. javascript 的惯性运动

    移动端的惯性运动,最早来自 ios 的专利.用于手指滑动,离开屏幕之后,屏幕内容继续滚动.更有动态感. 这里,以 pc 端,鼠标横向(沿x轴) 拖拽的,惯性计算.移动端同理 具体代码如下: <! ...

  5. C# 语言基础学习路线图

    一直以来,对于很多知识点都是存于收藏夹中,随着时间地变更,收藏夹中链接也起来越多,从未进行整理,也很零散,所以想对曾经遇到并使用过的一些知识形成文档,作为个人知识库的一部分. 就从C# 语言基础开始, ...

  6. net core体系-Xamarin-2概要(lignshi)

    通过本套课程的学习,各位学员能够对Xamarin有一个比较清楚的认识,掌握Xamarin常用功能的使用方法,能够比较熟练的使用Xamarin进行App(移动应用)的开发,能够比较轻松.快速地投入项目当 ...

  7. lua堆栈

    lua堆栈 来源 https://blog.csdn.net/suhuaiqiang_janlay/article/details/56702381 来源 https://blog.csdn.net/ ...

  8. Ubuntu16.04 + caffe + cuda 环境搭建

    1. sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-de ...

  9. vue中使用svg字体图标

    1.在src/ 下面新建目录icons,里面新建文件夹svg,和文件index.js .svg用于存放从iconfont下载下来的svg格式的图标,index.js用于引入使用到svg文件和对应的组件 ...

  10. 微信小程序带参数生成二维码

    wx.request({ url: 'https://api.weixin.qq.com/cgi-bin/token', header: { 'content-type': 'application/ ...