首页 技术 正文
技术 2022年11月14日
0 收藏 815 点赞 3,147 浏览 1457 个字

http://acm.hdu.edu.cn/showproblem.php?pid=6071

题意:

1、2、3、4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回到2结点并且不少于K的最短距离。

思路:

官方题解:

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

最后的答案可以表示为:$ans=p*(2w)+m$,这样一来,m的取值范围就是$(0<=m<2w)$,而因为m的不同,p值也会有所不同。所以我们用 d [ i ] [ m ]表示从起点出发,最后到达 i 点,距离对2w取模为m时的最小距离,这个计算一下最短路即可。

最后只需要枚举m,如果此时d [ 2 ] [ m ]不足K的话,那么就再加上2w补足即可,在所有的m中取最小值。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,ll> pll;
const ll INF = ;
const int maxn=1e6+; ll k;
ll m;
ll d[];
ll dis[][maxn];
vector<pll> G[]; struct HeapNode
{
int u; ll w;
HeapNode(int x, ll y) :u(x), w(y){}
bool operator <(const HeapNode& rhs) const{
return w>rhs.w;
}
}; void dijkstra()
{
priority_queue<HeapNode> Q;
for(int i=;i<;i++)
for(int j=;j<=m;j++) dis[i][j]=INF; Q.push(HeapNode(,));
while(!Q.empty())
{
HeapNode p=Q.top(); Q.pop();
int u=p.u;
ll w=p.w; for(int i=;i<G[u].size();i++)
{
int v=G[u][i].first;
ll new_w=G[u][i].second+w;
if(dis[v][new_w%m]>new_w)
{
dis[v][new_w%m]=new_w;
Q.push(HeapNode(v,new_w));
}
}
}
} int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&k);
for(int i=;i<;i++) G[i].clear();
for(int i=;i<;i++)
{
scanf("%lld",&d[i]);
G[i].push_back(make_pair((i+)%,d[i]));
G[(i+)%].push_back(make_pair(i,d[i]));
}
m=*min(d[],d[]);
dijkstra(); ll ans=INF;
for(int i=;i<m;i++)
{
ll tmp=k-dis[][i];
if (tmp<=) ans=min(ans,dis[][i]);
else ans=min(ans,dis[][i]+(ll)ceil((long double)tmp/m)*m);
}
printf("%lld\n",ans);
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,906
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727