/*
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. java-监听器(Listener)

    监听器:用于监听web应用中某些对象.信息的创建.销毁等动作,服务器会自动调用相应的方法进行处理.常用于统计在线人数,初始化系统参数等. Javaweb监听器主要监听对象有ServletContext ...

  2. celery异步任务

    1.安装 pip install celery 2.创建celery_tasks文件夹,创建config配置文件和main文件 # 在config.py文件中配置中间人broker地址信息 - red ...

  3. php实现算法

    二分法查找(已排序) @params  $arr 查找的数组  $start 开始查找的下标  $end 结束查找的下标  $value 查找的值 function bin_search($arr,$ ...

  4. python — 池

    1. 池 池分为:进程池.线程池 池:预先的开启固定个数的进程数/线程数,当任务来临的时候,直接提交给已经开好的进程 / 线程,让这个进程 / 线程去执行就可以了. 池节省了进程.线程的开启.关闭.切 ...

  5. 【规律】Growing Rectangular Spiral

    Growing Rectangular Spiral 题目描述 A growing rectangular spiral is a connected sequence of straightline ...

  6. docker-registry的定制和性能分析

    docker-index Web UI Meta-data 元数据存储(附注.星级.公共库清单) 访问认证 token管理 存储镜像.以及镜像层的家族谱系 没有用户账户数据 不知道用户的账户和安全性 ...

  7. c#将电脑时间同步到网络时间

    最近遇到个项目,需要控制软件使用时间,由于电脑不联网可以修改时间,故需要联网使电脑同步网络时间 网上寻找了很多解决方案,代码如下: //Forproc_Win32.cs//对常用Win32 API函数 ...

  8. C++性能榨汁机之无锁编程

    C++性能榨汁机之无锁编程 来源 http://irootlee.com/juicer_lock_free/ 前言 私以为个人的技术水平应该是一个螺旋式上升的过程:先从书本去了解一个大概,然后在实践中 ...

  9. 每日一句 Linux, 持续精进

    每日一句 Linux, 持续更新 2019.12.10 1.远程登录 linux 服务器.首先要按照ssh(win10默认是安装了的).命令行窗口,使用 ssh 登录名@serverIp,之后输入密码 ...

  10. 14 SQLAlchemy

    一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL ...