bzoj4152 [AMPPZ2014]The Captain
最短路,先将x排序,然后把排序后权值相邻的点连边,再把y排序,也把权值相邻的点连边,求一遍1到n的最短路就好啦。
代码
#include<cstdio>
#include<queue>
#include<algorithm>
#define mp make_pair
#define fi first
#define sc second
#define N 1000000
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
int n,i,dp,p[N],pre[N],tt[N],ww[N],flag[N];
int dis[N];
priority_queue<P,vector<P>,greater<P> > Q;
struct g{
int a,b,id;
}v[N];
bool cmp1(g u,g v)
{
return u.a<v.a;
}
bool cmp2(g u,g v)
{
return u.b<v.b;
} void link(int x,int y,int z)
{
dp++;pre[dp]=p[x];p[x]=dp;tt[dp]=y;ww[dp]=z;
}
long long ans,f[N],sum[N];
int main()
{
scanf("%d",&n);
for (i=;i<=n;i++)
scanf("%d%d",&v[i].a,&v[i].b),v[i].id=i;
sort(v+,v++n,cmp1);
for (i=;i<n;i++)
{
link(v[i].id,v[i+].id,abs(v[i].a-v[i+].a));
link(v[i+].id,v[i].id,abs(v[i].a-v[i+].a));
}
sort(v+,v++n,cmp2);
for (i=;i<n;i++)
{
link(v[i].id,v[i+].id,abs(v[i].b-v[i+].b));
link(v[i+].id,v[i].id,abs(v[i].b-v[i+].b));
}
int inf=;
for (i=;i<=n;i++) dis[i]=inf;
Q.push(mp(,)); while (!Q.empty())
{
P x=Q.top();Q.pop();
if (x.fi!=dis[x.sc]) continue;
i=p[x.sc];
while (i)
{
if (dis[x.sc]+ww[i]<dis[tt[i]])
{
dis[tt[i]]=dis[x.sc]+ww[i];
Q.push(mp(dis[tt[i]],tt[i]));
}
i=pre[i];
}
}
printf("%d\n",dis[n]);
}
bzoj4152 [AMPPZ2014]The Captain的更多相关文章
- BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*
BZOJ4152 AMPPZ2014 The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点 ...
- bzoj4152[AMPPZ2014]The Captain 最短路
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1517 Solved: 603[Submi ...
- BZOJ4152 AMPPZ2014 The Captain(最短路)
事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案.于是这样连边跑最短路就可以了. #include<iostream> #include<cstdio> #inclu ...
- 【BZOJ4152】[AMPPZ2014]The Captain 最短路
[BZOJ4152][AMPPZ2014]The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1 ...
- 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain
循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...
- BZOJ 4152: [AMPPZ2014]The Captain( 最短路 )
先按x排序, 然后只有相邻节点的边才有用, 我们连起来, 再按y排序做相同操作...然后就dijkstra ---------------------------------------------- ...
- 【BZOJ】4152: [AMPPZ2014]The Captain【SLF优化Spfa】
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2107 Solved: 820[Submi ...
- 【BZOJ4152】The Captain(最短路)
[BZOJ4152]The Captain(最短路) 题面 BZOJ Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求 ...
- 4152: [AMPPZ2014]The Captain
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1561 Solved: 620[Submi ...
随机推荐
- (转)常用的js设计模式
模式是解决或者避免一些问题的方案. 在JavaScript中,会用到一些常用的编码模式.下面就列出了一些常用的JavaScript编码模式,有的模式是为了解决特定的问题,有的则是帮助我们避免一些Jav ...
- yii多数据库
Yii中同时连接多个数据库 Published by 荒野无灯 on 2011-07-09 02:12:45 under PHP/Yii Tags:yii,database 14162 views 0 ...
- WGZX:javaScript 学习心得--2
转贴javascript心得(二) 标签: javascriptajaxweb开发htmlfirefox框架 2008-09-11 10:56 636人阅读 评论(0) 收藏 举报 分类: UI(2 ...
- js 判断js函数、变量是否存在
//是否存在指定函数 function isExitsFunction(funcName) { try { if (typeof(eval(funcName)) == "function&q ...
- 原因是未找到“sgen.exe”,或未安装 .NET Framework SDK v2.0
visual studio编译出现错误:错误 2 任务失败,原因是未找到“sgen.exe”,或未安装 .NET Framework SDK v2.0.该任务正在注册表项 HKEY_LOCAL_MAC ...
- 兼容IE的CSS的”引入方式“
1.给IE浏览器的7版本来提供需要引用的样式(如果把7去掉则给所有的IE浏览器提供样式) <!--[if IE 7]> <Link type="text/css" ...
- Linux中的ps命令
Linux中ps命令用来列出系统中当前运行的那些进程. 使用格式:ps 参数 如:ps -A 通过man ps可以获得ps的详细参数用法 -A 显示所有进程信息 c 列出程序时,显示每个程序真正的 ...
- 用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量
用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量
- Malformed POM expected START_TAG or END_TAG not TEXT
I resolved this problem by replacing blank space to tab. 规范些就解决这个问题了!!! 由此可见规范的重要性!
- 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
参考网址:http://blog.csdn.net/zhanglianpin/article/details/41575849 绝对的经典.