BZOJ4152 The Captain(dijkstra+巧妙建图)
BZOJ4152 The Captain
题面很简洁:
给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。
很明显这是道最短路
我们知道在求最短路时本身就要不断求min
所以相对于拐弯抹角的横纵差的较小值,我们完全可以无视这个求min
转为建|x1-x2|,|y1-y2|两条边
最后跑一遍最短路即可
(ps.这题是卡SPFA的)
IO优化、头文件啥的就自己yy一下吧
#define int long long
const int N=2e5+5,M=N<<2;
int n,m,s,h[N],en,dis[N];
struct point{int i,x,y;}a[N]; //存点坐标
struct node{ //松弛操作中的节点
int x,v;
inline bool operator < (const node &nt) const {
return v>nt.v;
}
};
struct edge{int n,v,w;}e[M]; //前向星边表
void add(int x,int y,int z){e[++en]=(edge){h[x],y,z};h[x]=en;} //加边
void dij(int s){ //dij模板
priority_queue<node> q;
memset(dis,66,sizeof dis);
q.push((node){s,0});
dis[s]=0;
while(!q.empty()){
node x=q.top();
q.pop();
if(x.v!=dis[x.x]) continue; //一个dij懒惰操作,省去了visit[]数组
for(int i=h[x.x];i;i=e[i].n){
int y=e[i].v;
if(dis[x.x]+e[i].w<dis[y]){
dis[y]=dis[x.x]+e[i].w;
q.push((node){y,dis[y]});
}
}
}
}
inline bool cmpx(const point &x,const point &y){return x.x==y.x?x.y<y.y:x.x<y.x;}
inline bool cmpy(const point &x,const point &y){return x.y==y.y?x.x<y.x:x.y<y.y;}
signed main(){
read(n);
for(int i=1;i<=n;i++)
a[i].i=i,read(a[i].x),read(a[i].y);
sort(a+1,a+1+n,cmpx); //按横坐标排
for(int i=2;i<=n;i++)
add(a[i-1].i,a[i].i,a[i].x-a[i-1].x), //前后节点建双向边
add(a[i].i,a[i-1].i,a[i].x-a[i-1].x);
sort(a+1,a+1+n,cmpy); //按纵坐标排
for(int i=2;i<=n;i++)
add(a[i-1].i,a[i].i,a[i].y-a[i-1].y),
add(a[i].i,a[i-1].i,a[i].y-a[i-1].y);
dij(1);
printf("%lld",dis[n]);
}
BZOJ4152 The Captain(dijkstra+巧妙建图)的更多相关文章
- 2018.10.30 NOIP模拟 有环无向图(dijkstra+巧妙建图)
传送门 建图巧妙啊. 对于每个点的出边,我们将它们排序之后依次连边. 这样可以把O(m2)O(m^2)O(m2)的边数变成O(m)O(m)O(m)的了. 连的权值就是max(edgemax(edgem ...
- HDU5521 Meeting(dijkstra+巧妙建图)
HDU5521 Meeting 题意: 给你n个点,它们组成了m个团,第i个团内有si个点,且每个团内的点互相之间距离为ti,问如果同时从点1和点n出发,最短耗时多少相遇 很明显题目给出的是个无负环的 ...
- 『The Captain 最短路建图优化』
The Captain(BZOJ 4152) Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小 ...
- HDU5772 String problem 最大权闭合图+巧妙建图
题意:自己看吧(不是很好说) 分析: 网络流:最大权闭合子图. 思路如下: 首先将点分为3类 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得 ...
- 【算法系列学习】巧妙建图,暴搜去重 Counting Cliques
E - Counting Cliques http://blog.csdn.net/eventqueue/article/details/52973747 http://blog.csdn.net/y ...
- POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图
题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...
- [Bzoj4289]PA2012 Tax(Dijkstra+技巧建图)
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...
- UVA1327 && POJ1904 King's Quest(tarjan+巧妙建图+强连通分量+缩点)
UVA1327 King's Quest POJ1904 King's Quest 题意: 有n个王子,每个王子都有k个喜欢的妹子,每个王子只能和喜欢的妹子结婚.现有一个匹配表,将每个王子都与一个自己 ...
- bzoj4152 The Captain (dijkstra)
做dijkstra,但只需要贪心地把每个点连到它左边.右边.上边.下面的第一个点就可以了 #include<bits/stdc++.h> #define pa pair<int,in ...
随机推荐
- Win10《芒果TV》商店内测版更新至v3.7.65.0:跨平台UI新体验,铺路SP
Win10<芒果TV - Preview>是Win10<芒果TV>官方唯一指定内测预览版,最新的改进和功能更新将会在此版本优先体验. 春去夏来,初心犹在,Win10<芒果 ...
- Asp +Js 无刷新分页
Default.aspx代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...
- 邮件带附件和html格式
1. 发送有附件的邮件需要添加一个附件类Attachment,这个附件可以为文件和图片: Attachment attach = new Attachment(“文件路径”");//文件 A ...
- MongoDB数据查询
启动MongoDB:sudo service mongodb start,mongo 经测试,键可加引号也可不加,但是值一般要加引号,数值类型除外 MongoDB区分大小写,命名通常采用驼峰式命名法 ...
- Windows Mount NFS Share from e.g. Linux
Note: Not Stable, so steps below are for reference only ************ Linux Configuration NFS Share 1 ...
- web开发常用正则表达式
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数 ...
- Codility---BinaryGap
Task description A binary gap within a positive integer N is any maximal sequence of consecutive zer ...
- JavaScript规定了几种语言类型?
JavaScript中的每一个值都有它自己的类型,JavaScript规定了七种语言类型: 1.Undefined 2.Null 3.Boolean 4.String 5.Number 6.Symbo ...
- HTML连载12-体验CSS
一.通过标签来修改标签有哪些缺点: (1)需要记忆那些标签有哪些属性 (2)若该标签没有这个属性,则修改失败 (3)需求变更,需要修改大量的代码 (4)HTML标签及用于添加语义,与我们的定义不相符 ...
- pomelo使用中的常见问题
1.端口被占用, 有进程没杀干净. 用 pomelo kill --force 命令清一下进程.