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 ...
随机推荐
- NSArry的常见方法
使用数组对象创建的数组功能非常强大,在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型.而Objective-C语言可以在Array数组中放任意类型的数据,值得注意的是只能 ...
- magento 切换数据库,使用不同数据库
1. 在app/etc/local.xml 中,添加新的数据库选项 <?xml version="1.0"?> <config> <global> ...
- [LeetCode]题解(python):034-Search for a Range
题目来源 https://leetcode.com/problems/search-for-a-range/ Given a sorted array of integers, find the st ...
- Top Five Communication Skills for Project Managers
Research among project managers globally identifies top communication skills for leading teams. Lead ...
- Linux makefile 教程 非常详细,且易懂 (转)
概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- LogBack配置详解(一)
一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...
- iOS 支付 [支付宝、银联、微信](转载)
资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...
- Infinity loop in cursor iteration
原始代码如下: begin DECLARE @SQL_STMT NVARCHAR(300), @V_CLIENT_ID INT, @V_PGNAME VARCHAR(1000), @V_LOGID I ...
- iOS:如何将自己的SDK用CocoaPods管理
条件: 需要在终端上将工程发布到cocoapods上,这样才能用cocoapods进行管理. 步骤: 首先,你得有一个pod的账号 在终端中输入pod 可以查看关于pod 的命令帮助,输入pod t ...
- PHP的压力测试工具ab.exe 和mpm介绍提高并发数
该工具是apache自带的,可以用它来测试网站的并发量有多大和某个页面的访问时间. 基本用法: 1. 进入CMD,转到apache的bin目录下. 2. 执行命令ab.exe -n 访问的问次数 ...