BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心
时间:2019-09-19
本文章向大家介绍BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心,主要包括BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Code:
#include <queue> #include <cstdio> #include <cstring> #include <algorithm> #define N 400005 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; ll d[N]; int n,edges; int hd[N],to[N<<1],nex[N<<1],val[N<<1],done[N]; void addedge(int u,int v,int c) { nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c; swap(u,v); nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c; } struct Point { int x,y,id; }e[N]; bool cmpx(Point a,Point b) { return a.x<b.x; } bool cmpy(Point a,Point b) { return a.y<b.y; } struct Node { int u; ll dis; Node(int u=0,ll dis=0):u(u),dis(dis){} bool operator<(Node b) const { return b.dis<dis; } }; priority_queue<Node>q; void Dijkstra() { int s=1; memset(d,0x3f,sizeof(d)); for(d[s]=0,q.push(Node(s,0));!q.empty();) { Node e=q.top(); q.pop(); int u=e.u,i,v; if(done[u]) continue; done[u]=1; for(i=hd[u];i;i=nex[i]) { v=to[i]; if(d[v]>d[u]+val[i]) { d[v]=d[u]+val[i]; q.push(Node(v,d[v])); } } } } int main() { int i,j,k; // setIO("input"); scanf("%d",&n); for(i=1;i<=n;++i) { int x,y; scanf("%d%d",&e[i].x,&e[i].y), e[i].id=i; } sort(e+1,e+1+n,cmpx); for(i=2;i<=n;++i) addedge(e[i-1].id,e[i].id,e[i].x-e[i-1].x); sort(e+1,e+1+n,cmpy); for(i=2;i<=n;++i) { addedge(e[i-1].id,e[i].id,e[i].y-e[i-1].y); } Dijkstra(); printf("%lld\n",d[n]); return 0; }
原文地址:https://www.cnblogs.com/guangheli/p/11546772.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android评分RationBar控件使用详解
- Flutter里面错误捕获的正确方法
- django3 websockets
- 使用AccessibilityService实现自动遍历点赞功能
- Android自定义字母导航栏
- [-Flutter 自组篇-] 圆形进度条
- Flutter 滚动监听及实战appBar滚动渐变的实现
- Android 开机充电图标和充电动画效果
- 使用tea算法对数据进行加密
- Android实现页面翻转和自动翻转功能
- Android实现自定义手势和识别手势的功能
- android 使用okhttp可能引发OOM的一个点
- 到底有几个进程在运行
- Android中butterknife的使用与自动化查找组件插件详解
- Android生成条形码和二维码功能