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 ...
随机推荐
- 蓝牙BLE LINK LAYER剖析(一) -- status and channel
一.LINK LAYER STATES 二.PHYSICAL CHANNEL
- C++内存问题大集合(指针问题,以及字符串拷贝问题,确实挺危险的)
作者:rendao.org,版权声明,转载必须征得同意. 内存越界,变量被篡改 memset时长度参数超出了数组长度,但memset当时并不会报错,而是操作了不应该操作的内存,导致变量被无端篡改 还可 ...
- UML时序图总结
前言 在我的工作中,用的最多的就是时序图了.可能由于工作的原因,我也是最喜欢画时序图了,很清楚,很明了,什么时候发送什么消息,到达什么状态,一下子就展示在你的脑海里,对于消息驱动的程序来说,是再好不过 ...
- Intent Flag(转)
转载自 http://blog.csdn.net/berber78/article/details/7278408 一. intent.setFlags()方法中的参数值含义: 1.FLAG_ACTI ...
- Android笔记: Android版本号
由于有2套版本号 总是对应不准 记下来做过标记 Android 4.3 ----18 Android 4.2---17 Android 4.1---16 Android 4.0.3---15Andro ...
- 学习一下Fiddler的强大
①引言:Fiddler (中文名称:小提琴)是一个 HTTP 的调试代理,以代理服务器的方式,监听系统的Http网络数据流动, Fiddler 可以也可以让你检查所有的 HTTP 通讯,设置断点,以及 ...
- mongoDB命令
. getLastError db.runCommand({getLastError:}) . buildInfo //返回mongoDB的服务器版本号和操作系统类型 db.runCommand({} ...
- 【长期有效】1分钱抢100M上网流量及iPhone5S免费抽奖
声明:本活动经作者亲自体验,绝对真实.安全.可靠.下文中图片为手机界面截图,最终得到官方手机流量增加100M的短信通知,回家过年使用最合适! 0.点击下方活动图片,进入“百度钱包”页面,你也可以直接 ...
- winston日志管理1
Usage There are two different ways to use winston: directly via the default logger, or by instantiat ...
- SQL Server数据库中还原孤立用户的方法集合
虽然SQL Server现在搬迁的技术越来越多,自带的方法也越来越高级. 但是我们的SQL Server在搬迁的会出现很多孤立用户,微软没有自动的处理. 因为我们的数据库权限表都不会在应用数据库中,但 ...