题目链接:

http://codeforces.com/problemset/problem/301/B

B. Yaroslav and Time

time limit per test2 seconds
memory limit per test256 megabytes
#### 问题描述
> Yaroslav is playing a game called "Time". The game has a timer showing the lifespan he's got left. As soon as the timer shows 0, Yaroslav's character dies and the game ends. Also, the game has n clock stations, station number i is at point (xi, yi) of the plane. As the player visits station number i, he increases the current time on his timer by ai. The stations are for one-time use only, so if the player visits some station another time, the time on his timer won't grow.
>
> A player spends d·dist time units to move between stations, where dist is the distance the player has covered and d is some constant. The distance between stations i and j is determined as |xi - xj| + |yi - yj|.
>
> Initially, the player is at station number 1, and the player has strictly more than zero and strictly less than one units of time. At station number 1 one unit of money can increase the time on the timer by one time unit (you can buy only integer number of time units).
>
> Now Yaroslav is wondering, how much money he needs to get to station n. Help Yaroslav. Consider the time to buy and to increase the timer value negligibly small.
#### 输入
> The first line contains integers n and d (3 ≤ n ≤ 100, 103 ≤ d ≤ 105) — the number of stations and the constant from the statement.
>
> The second line contains n - 2 integers: a2, a3, ..., an - 1 (1 ≤ ai ≤ 103). The next n lines contain the coordinates of the stations. The i-th of them contains two integers xi, yi (-100 ≤ xi, yi ≤ 100).
>
> It is guaranteed that no two stations are located at the same point.
#### 输出
> In a single line print an integer — the answer to the problem.
####样例输入
> 3 1000
> 1000
> 0 0
> 0 1
> 0 3

样例输出

2000

题意

给你二维上的n个点,两个点的时间消耗为哈密顿距离*d,且到第i个点能补充a[i]的时间,问你在起始点需要买多少的时间才能保证你能够到终点。

题解

对于每条边(u,v),边权定为d*(u到v的哈密顿距离)-a[v],然后由点n到点1跑spfa最短路,这里注意:由于题目给的d和a的范围,导致都是正权图。

代码

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)
#define scf scanf
#define prf printf typedef __int64 LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8;
const double PI = acos(-1.0); //start---------------------------------------------------------------------- const int maxn=111; struct Edge {
int u,v,d;
Edge(int u,int v,int d):u(u),v(v),d(d) {}
}; int n,D;
int arr[maxn];
int mat[maxn][maxn];
PII pt[maxn]; int dis(int i,int j) {
return abs(pt[i].X-pt[j].X)+abs(pt[i].Y-pt[j].Y);
} bool inq[maxn];
LL d[maxn];
LL spfa(int s) {
queue<int> Q;
clr(inq,0);
for(int i=1; i<=n; i++) d[i]=INFL;
d[s]=0,inq[s]=true,Q.push(s);
while(!Q.empty()) {
int u=Q.front();
Q.pop();
inq[u]=false;
for(int v=1;v<=n;v++){
if(v==u) continue;
if(d[v]>d[u]+mat[u][v]){
d[v]=d[u]+mat[u][v];
if(!inq[v]){
Q.push(v); inq[v]=1;
}
}
}
}
return d[1];
} int main() {
scf("%d%d",&n,&D);
arr[1]=arr[n]=0;
for(int i=2; i<n;i++) scf("%d",&arr[i]); for(int i=1; i<=n; i++) {
scf("%d%d",&pt[i].X,&pt[i].Y);
} for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(i==j) mat[i][j]=0;
else mat[i][j]=dis(i,j)*D-arr[j];
}
} LL ans=spfa(n); prf("%I64d\n",ans); return 0;
} //end-----------------------------------------------------------------------

最新文章

  1. Meet python: little notes 4 - high-level characteristics
  2. 利用bak文件恢复数据库问题小结
  3. ios7适配一些问题以及64位32位
  4. linux下安装vsftp
  5. jQuery 效果 - 滑动
  6. jquery插件-自定义select
  7. Spring Boot 系列教程11-html页面解析-jsoup
  8. 添加&lt;!doctype html&gt;后造成JS写的定位失效
  9. oracle中如何移动数据文件
  10. iOS 之 runtime --- 集百家之言
  11. Netty对WebSocket的支持(五)
  12. Windbg分析高内存占用问题
  13. win10 python27pyhton36共存
  14. Docker学习之4——构建NGINX镜像
  15. 对delphi中的数据敏感控件的一点探索
  16. angular validation 使用总结
  17. Linux命令2——b
  18. 一个项目中既有移动端,同时也有PC端的代码,并且 他们的代码分开写的,那么如何实现在手机跳转手机页面,pc点击跳转pc页面
  19. object视频播放
  20. 1053 Path of Equal Weight (30 分)

热门文章

  1. mysql索引和外键
  2. JQuery中的事件委托
  3. 数据库之mongodb
  4. 20155305mypwd的实现和测试
  5. 基于bootstrap的文本编辑器组件:Summernote
  6. 14 [网络编程]-socket
  7. 【HNOI2013】游走
  8. 3495: PA2010 Riddle
  9. SQL Server 小数类型(float 和 decimal)
  10. matplotlib简单示例