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 对于这种“多种”路径加中转站的题,还有那种有若干次“特殊能力”的题,都可以考虑用分层图来做 显然只需要记录所有的中转站+起点终点,然后拆出横竖两 ...
随机推荐
- 解决Chrome在隐身模式下无法播放Flash视频
在地址栏输入: chrome://flags/#prefer-html-over-flash 打开如下界面,并设置成如下所示: 然后点击左下方重启按钮: 参考: http://www.cnblogs. ...
- fputs与fgets
1. fputs 函数名: fputs 功 能: 送一个字符到一个流中 用 法: int fputs(char *string, FILE *stream); 说明: fputs是一 ...
- 贪吃蛇c++实现
近期没事翻了一下曾经写的程序.真是不堪入目.曾经真是什么都不懂.只是有一个程序倒是挺有意思的,大二的时候写的一个贪吃蛇游戏.尽管程序非常难看,还有非常多漏洞.但也是这个程序让我真正開始喜欢上了编程.不 ...
- 【待解决】使用JUnit时报错java.lang
编写selenium自动化代码,代码逻辑应该都没有错,运行时老是报如下错误 java.lang.NoClassDefFoundError: org/json/JSONException 解决办法:导入 ...
- cocos2d-x 是怎样渲染的
要知道 是怎样渲染的:要先选中 就可以 谁知道: c ocos2d-x 是怎样渲染的 ? 每一个CCNODE自己有draw 北京-菜菜: :: draw draw负重渲染 ************** ...
- Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 线段树模拟
E. Correct Bracket Sequence Editor Recently Polycarp started to develop a text editor that works o ...
- class com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text
运行mapreduce遇到的错: Java.lang.ClassCastException: classcom.sun.jersey.core.impl.provider.entity.XMLJAXB ...
- Patterns in the Composite Application Library
Patterns in the Composite Application Library Inversion of Control https://www.codeproject.com/Artic ...
- [xPlugins] jQuery Contextmenu右键菜单
[2012-04-12] Contextmenu 右键菜单 v0.1 版本发布 [功能] 在特定区域弹出右键菜单 [功能] 可以在弹出右键菜单区域内,再屏蔽某个小区域. [功能] 有两种方式添加右键菜 ...
- LinkedHashMap做缓存
项目上需要写一个缓存,这样就不需要频繁地访问数据库,我使用的是 //缓存 private final Map<String, JSONArray> schemaCache = new Li ...