bzoj4152 The Captain (dijkstra)
做dijkstra,但只需要贪心地把每个点连到它左边、右边、上边、下面的第一个点就可以了
#include<bits/stdc++.h>
#define pa pair<int,int>
#define lowb(x) ((x)&(-(x)))
#define REP(i,n0,n) for(i=n0;i<=n;i++)
#define PER(i,n0,n) for(i=n;i>=n0;i--)
#define MAX(a,b) ((a>b)?a:b)
#define MIN(a,b) ((a<b)?a:b)
#define CLR(a,x) memset(a,x,sizeof(a))
#define rei register int
using namespace std;
typedef long long ll;
const int maxn=2e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Node{
int x,y,id;
}pos[maxn];
int N,xnxt[maxn][],ynxt[maxn][];
int dis[maxn],px[maxn],py[maxn];
bool flag[maxn];
priority_queue<pa,vector<pa>,greater<pa> > q; inline bool cmp1(Node a,Node b){return a.x<b.x;}
inline bool cmp2(Node a,Node b){return a.y<b.y;} inline void psh(int x,int d){
if(dis[x]==-||d<dis[x]){
dis[x]=d;
if(!flag[x]) q.push(make_pair(d,x));
}
} inline void dijkstra(){
memset(dis,-,sizeof(dis));dis[]=;
q.push(make_pair(,));
while(!q.empty()){
int p=q.top().second;q.pop();if(flag[p]) continue;
flag[p]=;
if(p==N) return;
if(xnxt[p][]) psh(xnxt[p][],dis[p]+px[p]-px[xnxt[p][]]);
if(xnxt[p][]) psh(xnxt[p][],dis[p]-px[p]+px[xnxt[p][]]);
if(ynxt[p][]) psh(ynxt[p][],dis[p]+py[p]-py[ynxt[p][]]);
if(ynxt[p][]) psh(ynxt[p][],dis[p]-py[p]+py[ynxt[p][]]);
}
} int main(){
//freopen(".in","r",stdin);
rei i,j,k;
N=rd();
for(i=;i<=N;i++) px[i]=pos[i].x=rd(),py[i]=pos[i].y=rd(),pos[i].id=i;
sort(pos+,pos+N+,cmp1);
for(i=;i<=N;i++){
xnxt[pos[i].id][]=pos[i-].id;
xnxt[pos[i].id][]=pos[i+].id;
}
sort(pos+,pos+N+,cmp2);
for(i=;i<=N;i++){
ynxt[pos[i].id][]=pos[i-].id;
ynxt[pos[i].id][]=pos[i+].id;
}
dijkstra();
printf("%d\n",dis[N]);
return ;
}
bzoj4152 The Captain (dijkstra)的更多相关文章
- BZOJ4152 The Captain(dijkstra+巧妙建图)
BZOJ4152 The Captain 题面很简洁: 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. 很明显 ...
- BZOJ4152The Captain[DIjkstra]
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 700 Solved: 266[Submit ...
- BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心
Code: #include <queue> #include <cstdio> #include <cstring> #include <algorithm ...
- bzoj4152 The Captain
Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. Input 第一行包含一个正整数n(2 ...
- [题解] [BZOJ4152] The Captain
题面 题解 将所有点根据
- $bzoj4152\ The\ Captain$ 最短路
正解:最短路+优化连边 解题报告: 传送门$w$ 这种优化连边啥的真的好妙噢$QwQ$ 首先显然离散化下不说$QwQ$.然后对所有横坐标纵坐标分别建点,相邻两横坐标点相连,边权为离散前的坐标差.纵坐标 ...
- noip2017考前整理(未完)
快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...
- 【bzoj4152】[AMPPZ2014]The Captain 堆优化Dijkstra
题目描述 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. 输入 第一行包含一个正整数n(2<=n< ...
- 【BZOJ4152】The Captain(最短路)
[BZOJ4152]The Captain(最短路) 题面 BZOJ Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求 ...
随机推荐
- 【LeetCode234】Palindrome Linked List★
题目描述: 解题思路: 判断一个单向链表是否是回文链表,并且要求O(n)的时间复杂度和O(1)的空间复杂度. 方法有以下几种: 1.遍历整个链表,将链表每个节点的值记录在数组中,再判断数组是不是一个回 ...
- OO——电梯作业总结
目录 电梯作业总结 程序结构与复杂度的分析 第一次作业 第二次作业 第三次作业 程序BUG的分析 互测 自动评测 有效性 总结 电梯作业总结 程序结构与复杂度的分析 第一次作业 1.设计思路 第一次作 ...
- JS 01 变量_数据类型_分支循环_数组
点击直通车↓↓↓ 数据类型及数据类型的手动转换 数组 一.概念 JavaScript(JS)是一种基于对象和事件驱动.且可以与HTML标记语言混合使用的脚本语言,其编写的程序可以直接在浏览器中解释执 ...
- ucosii笔记(一)
.ucosii是按照优先级高低来切换任务执行顺序的抢占式实时系统. 2.在被高优先级的任务抢占时,这个任务会将寄存器的数据(xPSR.PC.LR.R0.R1.R2.R3.R12等的值)存放在该任务自己 ...
- 从字节码层面,解析 Java 布尔型的实现原理
最近在系统回顾学习 Java 虚拟机方面的知识,其中想到一个很有意思的问题:布尔型在虚拟机中到底是什么类型? 要想解答这个问题,我们看 JDK 的源码是无法解决源码的,我们必须深入到 class 文件 ...
- .Net-C#异步程序知识点梳理
:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...
- Jmeter(九)_获取JDBC响应做接口关联
在之前的文章-参数关联中,留个一个小尾巴,这里补充一下 http://www.cnblogs.com/Zfc-Cjk/p/8295495.html 1:从sql表中将需要取的数据查出来 2:我们需要把 ...
- Appium+Python3+ Android入门
前言: Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用. 一.环境配置 1.安装Node.js https://nodejs.o ...
- PAT甲题题解-1034. Head of a Gang (30)-并查集
给出n和k接下来n行,每行给出a,b,c,表示a和b之间的关系度,表明他们属于同一个帮派一个帮派由>2个人组成,且总关系度必须大于k.帮派的头目为帮派里关系度最高的人.(注意,这里关系度是看帮派 ...
- Hamburger
Bread: 我觉得舒婷解决问题的思路还是很不错的,对于java 的窗口框架也是很熟悉,打码速度也快了很多. Meat:但是我发现你在命名的时候会出现随意的现象,如果命名只有你自己看得懂的话,那么会增 ...