bzoj 2834: 回家的路
题目

| F.A.Qs | Home | Discuss | ProblemSet | Status | Ranklist | Contest | 入门OJ | ModifyUser DCOI | Logout | 捐赠本站 |
|---|
2834: 回家的路
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 183 Solved: 98
[Submit][Status][Discuss]
Description

Input

Output

Sample Input
1 2
1 1 2 2
Sample Output
HINT
N<=20000,M<=100000
Source
解法
分层图最短路,将横向与纵向分开即可。
但是只能存下可转移的点与起点和终点。
数据好像有点水,起点和终点好像一定可以换乘
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cctype>
#include <vector>
#include <queue>
#define INF 2139062143
#define MAX 0x7ffffffffffffff
#define del(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
template<typename T>
inline void read(T&x)
{
x=;T k=;char c=getchar();
while(!isdigit(c)){if(c=='-')k=-;c=getchar();}
while(isdigit(c)){x=x*+c-'';c=getchar();}x*=k;
}
const int maxn=+;
int n,m,s,t,ecnt[];
struct Q{
int x,y,id;
}a[maxn]; struct Edge {
int u,v,w;
Edge(int u=,int v=,int w=):u(u),v(v),w(w) {}
};
vector<Edge> edge[];
vector<int> G[maxn][];
inline void add_edge(int u,int v,int w,int id) {
edge[id].push_back(Edge(u,v,w));
edge[id].push_back(Edge(v,u,w));
ecnt[id]+=;
G[u][id].push_back(ecnt[id]-);
G[v][id].push_back(ecnt[id]-);
} priority_queue< pair<pair<int,int>,int> > q;
int dis[maxn][];
bool vis[maxn][]; inline void dij() {
del(dis,);dis[s][]=dis[s][]=;
q.push(make_pair(make_pair(,s),));
q.push(make_pair(make_pair(,s),));
while(!q.empty()) {
pair<pair<int,int>,int> Node=q.top();q.pop();
pair<int,int> node=Node.first;
int id=Node.second,u=node.second,d=-node.first;
if(vis[u][id]) continue;
vis[u][id]=;
for(int i=;i<G[u][id].size();i++) {
Edge& e=edge[id][G[u][id][i]];
int v=e.v;
if(dis[v][id]>d+e.w) {
dis[v][id]=d+e.w;
q.push(make_pair(make_pair(-dis[v][id],v),id));
}
if(dis[v][id^]>d+e.w+) {
dis[v][id^]=d+e.w+;
q.push(make_pair(make_pair(-dis[v][id^],v),id^));
}
}
}
printf("%d\n",(min(dis[m+][],dis[m+][])==INF)?-:min(dis[m+][],dis[m+][]));
} bool cmp1(Q a,Q b) {
return (a.x^b.x)?a.x<b.x:a.y<b.y;
} bool cmp2(Q a,Q b) {
return (a.y^b.y)?a.y<b.y:a.x<b.x;
} bool cmp3(Q a,Q b) {
return a.id<b.id;
} int main()
{
read(n),read(m);
for(int i=;i<=m;i++) {read(a[i].x),read(a[i].y);a[i].id=i;}
read(a[m+].x),read(a[m+].y);read(a[m+].x),read(a[m+].y);a[m+].id=m+;a[m+].id=m+;
sort(a+,a++m+,cmp1);
for(int i=;i<m+;i++) if(a[i].x==a[i+].x) add_edge(a[i].id,a[i+].id,*(a[i+].y-a[i].y),);
sort(a+,a++m+,cmp2);
for(int i=;i<m+;i++) if(a[i].y==a[i+].y) add_edge(a[i].id,a[i+].id,*(a[i+].x-a[i].x),);
s=m+;
dij();
return ;
}
bzoj 2834: 回家的路的更多相关文章
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- BZOJ.2834.回家的路(最短路Dijkstra 拆点)
题目链接 对于相邻的.处在同在一行或一列的车站连边,然后用dis[x][0/1](或者拆点)分别表示之前是从横边还是竖边到x的,跑最短路. 我选择拆点.. //13028kb 604ms #inclu ...
- BZOJ 2834: 回家的路 Dijkstra
按照横,竖为方向跑一个最短路即可,算是水题~ #include <bits/stdc++.h> #define N 200005 #define E 2000000 #define set ...
- 分层图最短路【bzoj2834】: 回家的路
分层图最短路[bzoj2834]: 回家的路 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2834 这道题难在建边. 自己写的时候想到了 ...
- P3831 [SHOI2012]回家的路
P3831 [SHOI2012]回家的路 分层图基础题,就是建图稍有麻烦 #include<cstdio> #include<algorithm> #include< ...
- [SHOI2012]回家的路
题目背景 SHOI2012 D2T1 题目描述 2046 年 OI 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由2n2n条地铁线路构成,组成了一个nn纵nn横的交通网.如 ...
- [SHOI2012]回家的路 最短路
---题面--- 题解: 吐槽:找了好久的错,换了n种方法,重构一次代码,,,, 最后发现,,, 数组开小了,其实一开始尝试开大了数组,但唯独没有尝试开大手写队列的数组.... 思路: 有两种方法,这 ...
- 洛谷P3831 回家的路
题目背景 SHOI2012 D2T1 题目描述 \(2046\) 年 \(OI\) 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由\(2n\)条地铁线路构成,组成了一个\( ...
- 解题:SHOI 2012 回家的路
题面 完了,做的时候已经想不起来分层图这个东西了QAQ 对于这种“多种”路径加中转站的题,还有那种有若干次“特殊能力”的题,都可以考虑用分层图来做 显然只需要记录所有的中转站+起点终点,然后拆出横竖两 ...
随机推荐
- Django(七)
一.ModelForm操作及验证 1.class Meta:class Meta: #注意以下字段不能加逗号 model = models.UserInfo #这里的all代指所用的字段,也可以是一个 ...
- 基于DPI(深度报文解析)的应用识别2------实际分析
新浪微博的分析 早上刚刚起床先刷微博,打算就分析一下新浪微博.登陆之后抓取公布微博的数据包.进行分析. 1.抓包的要点: 1.关闭其它网络应用,保证本机网络流量的干净,便于分析. 2.先开启wires ...
- 10317 Fans of Footbal Teams
10317 Fans of Footbal Teams 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description ...
- rar x 解压rar文件,提示permission denied
问题: 解压rar文件,提示
- 站点搭建从零開始(七) WordPress站点的完好
1.WordPress站点前后端经常使用语言简单介绍和执行过程 通常一个站点的整个构建过程中须要大量的技术支持,尤其是用到非常多种计算机语言.站点的构建主要分后端和前端两部分,后端代码在server上 ...
- Hadoop-2.2.0中文文档——Apache Hadoop 下一代 MapReduce (YARN)
MapReduce在hadoop-0.23中已经经历了一次全然彻底地大修.就是如今我们叫的MapReduce 2.0 (MRv2) or YARN. MRv2的基本思想是把JobTracker分成两个 ...
- Max Sum--hdoj 1003 dp
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 关于chm提示 已取消到该网页的导航的解决方法
下载了一个chm文件,打开提示“已取消到该网页的导航”,以前以为是文件有问题,下载其他的也是出现这种情况,于是网上搜了下,解决方法如下: 方法 1 1. 双击此 .chm 文件. 2. 在“打开文件安 ...
- SqlServer显示“正在还原...”
还原数据库时,提示还原成功,但是数据库一直显示“正在还原...”的状态. 可以通过执行以下命令即可 RESTORE DATABASE DB_NAME WITH RECOVERY 原因: 关于recov ...
- canvas动画简单操作
canvas动画 小球滚动效果 关键api: window.requestAnimationFrame(draw) 会递归调用draw函数,替代setInterval var x = 20; var ...