BZOJ 2834: 回家的路 Dijkstra
按照横,竖为方向跑一个最短路即可,算是水题~
#include <bits/stdc++.h>
#define N 200005
#define E 2000000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m,tot,edges,s,T;
int hd[E],to[E],nex[E],val[E],d[E],done[E],id[E][2];
void addedge(int u,int v,int c)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c;
}
struct Point
{
int x,y,id;
Point(int x=0,int y=0):x(x),y(y){}
}t[N];
struct Node
{
int u,dis;
Node(int u=0,int dis=0): u(u),dis(dis){}
bool operator<(Node b) const
{
return b.dis<dis;
}
};
priority_queue<Node>q;
bool cmpx(Point a,Point b)
{
return a.x==b.x?a.y<b.y:a.x<b.x;
}
bool cmpy(Point a,Point b)
{
return a.y==b.y?a.x<b.x:a.y<b.y;
}
void Dijkstra()
{
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;
if(done[u]) continue;
done[u]=1;
for(int i=hd[u];i;i=nex[i])
{
int 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%d",&n,&m);
for(i=2;i<=m+1;++i)
{
scanf("%d%d",&t[i].x,&t[i].y);
id[i][0]=++tot;
id[i][1]=++tot;
t[i].id=i;
}
scanf("%d%d",&t[1].x,&t[1].y);
id[1][0]=++tot;
id[1][1]=++tot;
t[1].id=1;
m+=2;
scanf("%d%d",&t[m].x,&t[m].y);
id[m][0]=++tot;
id[m][1]=++tot;
t[m].id=m;
for(i=1;i<=m;++i)
{
addedge(id[i][0],id[i][1],1);
addedge(id[i][1],id[i][0],1);
}
sort(t+1,t+1+m,cmpx);
for(i=1;i<=m;i=j)
{
for(j=i;j<=m&&t[j].x==t[i].x;++j);
for(k=i+1;k<j;++k)
{
addedge(id[t[k-1].id][1], id[t[k].id][1], 2 * (t[k].y-t[k-1].y));
addedge(id[t[k].id][1], id[t[k-1].id][1], 2 * (t[k].y-t[k-1].y));
}
}
sort(t+1,t+1+m,cmpy);
for(i=1;i<=m;i=j)
{
for(j=i;j<=m&&t[j].y==t[i].y;++j);
for(k=i+1;k<j;++k)
{
addedge(id[t[k-1].id][0], id[t[k].id][0], 2 * (t[k].x-t[k-1].x));
addedge(id[t[k].id][0], id[t[k-1].id][0], 2 * (t[k].x-t[k-1].x));
}
} s=0, T=++tot; addedge(s, id[1][0], 0);
addedge(s, id[1][1], 0); addedge(id[m][0], T, 0);
addedge(id[m][1], T, 0);
Dijkstra();
printf("%d\n",d[T]);
return 0;
}
BZOJ 2834: 回家的路 Dijkstra的更多相关文章
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- bzoj 2834: 回家的路
题目 F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser DCOI Logout 捐赠本站 Notice:1 ...
- BZOJ.2834.回家的路(最短路Dijkstra 拆点)
题目链接 对于相邻的.处在同在一行或一列的车站连边,然后用dis[x][0/1](或者拆点)分别表示之前是从横边还是竖边到x的,跑最短路. 我选择拆点.. //13028kb 604ms #inclu ...
- 分层图最短路【bzoj2834】: 回家的路
分层图最短路[bzoj2834]: 回家的路 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2834 这道题难在建边. 自己写的时候想到了 ...
- P3831 [SHOI2012]回家的路
P3831 [SHOI2012]回家的路 分层图基础题,就是建图稍有麻烦 #include<cstdio> #include<algorithm> #include< ...
- 洛谷P3831 回家的路
题目背景 SHOI2012 D2T1 题目描述 \(2046\) 年 \(OI\) 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由\(2n\)条地铁线路构成,组成了一个\( ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- Bzoj 1674: [Usaco2005]Part Acquisition dijkstra,堆
1674: [Usaco2005]Part Acquisition Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 337 Solved: 162[Sub ...
- Bzoj 2346: [Baltic 2011]Lamp dijkstra,堆
2346: [Baltic 2011]Lamp Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 428 Solved: 179[Submit][Sta ...
随机推荐
- Java--垃圾回收【转载】
一:垃圾回收机制的意义 java 语言中一个显著的特点就是引入了java回收机制,可以有效的防止内存泄露,有效的使用空闲的内存. 内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般情况 ...
- Java手写简单Linkedlist一(包括增加,插入,查找,toString,remove功能)
@Java300 学习总结 一.自定义节点 LinkList底层为双向链表.特点为查询效率低,但增删效率高,线程不安全. 链表数据储存在节点,且每个节点有指向上个和下个节点的指针. 创建ggLinke ...
- SHE姐妹建模记录
中午11点54分,队长把MD5码提交上去在群里发了截图,我对着屏幕上刚检查完的论文,感觉整个人都轻松起来了,又有点恍惚,可能是这几天都没睡好觉.去楼下吃了顿饭,本来打算回来倒头就睡,睡到几点算几点,醒 ...
- Django-djangorestframework-请求模块-获取请求参数
目录 请求模块 源码分析 正式使用 总结 请求模块 主要是分析 drf 二次封装后的 request 对象 以及怎么拿到请求传递过来的数据(url 拼接的数据,数据包传过来的数据) 源码分析 源码查看 ...
- C++11 bind和function用法
function是一个template,定义于头文件functional中.通过function<int(int, int)> 声明一个function类型,它是“接受两个int参数.返回 ...
- AlertManager 部署及使用
熟悉了 Grafana 的报警功能,但是 Grafana 的报警功能目前还比较弱,只支持 Graph 的图表的报警.今天来给大家介绍一个功能更加强大的报警工具:AlertManager. 简介 之前我 ...
- 怎样理解 display:none 和 visibility:hidden
1. display: none会使元素节点 "消失" , 就像 死亡后灰飞烟灭了. 它是不占位置的. 2. visibility: hidden会使元素节点 "隐藏&q ...
- intellij IDE 破解 简单 License server 法
http://idea.iteblog.com/key.php
- Tomat服务器学习
Tomat服务器学习 使用的是Redhat版本的Tomcat 目录结构 bin:可执行文件 conf:配置文件 lib:tomcat运行时依赖的jar包 logs:日志文件 temp:临时文件 web ...
- 第三章 Lambda表达式
第三章 Lambda表达式 3.1 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是“拿什么东西做什么事情”.相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函 ...