Description

Input

Output

Sample Input

2 1
1 2
1 1 2 2

Sample Output

5
思路还是很简单的,然而最短路打错各种对拍各种调了一早上
代码:
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<queue>
 6 #include<cstdlib>
 7 #include<map>
 8 #include<algorithm>
 9 #define M 300010
10 using namespace std;
11 vector<int>S1[M],S2[M];
12 map<int,int>f[M];
13 int n,m,num,cnt,x1,x2,y1,y2;
14 int head[M],dis[M],vis[M],st[M],v[M];
15 struct point{int to,next,dis;}e[M<<1];
16 void add(int from,int to,int dis) {
17     e[++num].next=head[from];
18     e[num].to=to;
19     e[num].dis=dis;
20     head[from]=num;
21 }
22 void SPFA(int s) {
23     memset(dis,63,sizeof(dis));
24     queue<int>Q;dis[s]=0;
25     Q.push(s);
26     while(!Q.empty()) {
27         int x=Q.front();Q.pop();vis[x]=false;
28         for(int i=head[x];i;i=e[i].next) {
29             int to=e[i].to;
30             if(dis[x]+e[i].dis<dis[to]) {
31                 dis[to]=dis[x]+e[i].dis;
32                 if(!vis[to]) vis[to]=true,Q.push(to);
33             }
34         }
35     }
36 }
37 int get(int x,int y) {
38     return 2*abs(v[st[x]]-v[st[y]]);
39 }
40 bool cmp(int x,int y) {
41     return v[x]<v[y];
42 }
43 int main() {
44     scanf("%d%d",&n,&m);
45     for(int i=1;i<=m;i++) {
46         int x,y;scanf("%d%d",&x,&y);
47         if(f[x][y]!=0) continue;
48         f[x][y]=++cnt;
49         S1[x].push_back(cnt);v[cnt]=y;
50         S2[y].push_back(++cnt);v[cnt]=x;
51         add(cnt-1,cnt,1),add(cnt,cnt-1,1);
52     }
53     scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
54     if(!f[x1][y1]) {
55         f[x1][y1]=++cnt;
56         S1[x1].push_back(cnt);v[cnt]=y1;
57         S2[y1].push_back(++cnt);v[cnt]=x1;
58         add(cnt-1,cnt,0),add(cnt,cnt-1,0);
59     }
60     else {
61         int t=f[x1][y1];
62         add(t+1,t,0),add(t,t+1,0);
63     }
64     if(!f[x2][y2]) {
65         f[x2][y2]=++cnt;
66         S1[x2].push_back(cnt);v[cnt]=y2;
67         S2[y2].push_back(++cnt);v[cnt]=x2;
68         add(cnt-1,cnt,0),add(cnt,cnt-1,0);
69     }
70     else {
71         int t=f[x2][y2];
72         add(t+1,t,0),add(t,t+1,0);
73     }
74     for(int i=1;i<=(n<<1);i++) {
75         int tmp=0;
76         for(int j=0;j<S1[i].size();j++) st[++tmp]=S1[i][j];
77         if(tmp>1) {
78             sort(st+1,st+tmp+1,cmp);
79             for(int j=2;j<=tmp;j++) {
80                 add(st[j-1],st[j],get(j-1,j));
81                 add(st[j],st[j-1],get(j,j-1));
82             }
83         }
84         tmp=0;
85         for(int j=0;j<S2[i].size();j++) st[++tmp]=S2[i][j];
86         if(tmp>1) {
87             sort(st+1,st+tmp+1,cmp);
88             for(int j=2;j<=tmp;j++) {
89                 add(st[j-1],st[j],get(j-1,j));
90                 add(st[j],st[j-1],get(j,j-1));
91             }
92         }
93     }
94     int s=f[x1][y1],t=f[x2][y2];
95     SPFA(s);
96     printf("%d\n",dis[t]>1e8?-1:dis[t]);
97     return 0;
98 }

HINT

N<=20000,M<=100000

转载于:https://www.cnblogs.com/Slrslr/p/10075021.html

[BZOJ2834]回家的路相关推荐

  1. 2012年的第一天 自己独自踏上回家的路 木有任何人相送

    2012年的第一天 自己独自踏上回家的路 木有任何人相送 转载于:https://www.cnblogs.com/grh-valentine-boy/archive/2012/01/02/231030 ...

  2. do vis是什么意思_BBC听力: 2020年2月8日 小宠物为什么可以找到回家的路

    节目介绍 BBC 6 Minute-English 是BBC针对全球英语学习者推出的一款谈话类学习节目.每期一个时尚的话题,两个播音员以聊天的形式进行讲解,包括核心词汇讲解.内容活泼有趣,语速适中,适 ...

  3. 记住回家的路-周国平

    生活在今日的世界上,心灵的宁静不易得.这个世界既充满着机会,也充满着压力.机会诱惑人去尝试,压力逼迫人去奋斗,都使人静不下心来.我不主张年轻人拒绝任何机会,逃避一切压力,以闭关自守的姿态面对世界.年轻 ...

  4. 记住回家的路(周国平)

    生活在今日的世界上心灵的宁静不易得.这个世界既充满着机会,也充满着压力.机会诱惑人去尝试,压力逼迫人去奋斗,都使人静不下心来.我不主张年轻人拒绝任何机会,逃避一切压力,以闭关自守的姿态面对世界.年轻的 ...

  5. 我们都一直行走在出走和回归的轮回里,每一步都是离开,每一步都是回来,每一条离家的路都是回家的路,每一座坟墓都是母亲。

     我们在年轻的时候都背负着梦想离开家乡去远方流浪,所有的思念都让我们的旅行更加遥远和不可追回,然而直到我们觉得自己可以昂首回归的时候,家乡其实已经不复存在了,邻家的姑娘早已嫁人,我们出生的老房子已经拆 ...

  6. 【文学文娱】《回家的路-人生的来路》

    本文地址:https://www.cnblogs.com/aiweixiao/p/9902038.html 原文地址(微信公众号):<回家的路-人生的来路> 扫描关注微信公众号 火车的轰鸣 ...

  7. [趣味定理]喝醉的酒鬼总能找到回家的路,喝醉的小鸟则可能永远也回不了家。

    证明定理:喝醉的酒鬼总能找到回家的路,喝醉的小鸟则可能永远也回不了家.假设有一条水平直线,从某个位置出发,每次有 50% 的概率向左走1米,有50%的概率向右走1米.按照这种方式无限地随机游走下去,最 ...

  8. 【反传销】春节一个短暂误入传销和脱身的真实故事以及对技术的思考(二)回家之路...

    阅读目录 3.回家之路 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html       日常工具与其它文章目录:http://www ...

  9. 女儿的画作-《回家的路》

    女儿拿起画笔和颜料,在一张大纸上涂鸦,最终一句"这是小小回家的路",震惊了我们所有人...以下是小小的作品: 回家的路,我们看一下抽象主义大师杰克森.波洛克的作品: 错综复杂的网络 ...

最新文章

  1. 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)
  2. 天转凉了,注意保暖,好吗(需求规格说明书放在github了)
  3. erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...
  4. 总帐科目的批量传输与复制
  5. java中break和continue的用法例子
  6. Java:汇总堆外数据
  7. java入门的注意点_Java基础之Integer使用的注意事项及面试题
  8. [转] Mou 一个Markdown工具 语法规则文档(最后)
  9. 小米推出售价 19999 元的 MIX Alpha;高通已向华为重启供货;.NET Core 3.0 发布 | 极客头条...
  10. 【JSOI2014】【BZOJ5039】序列维护(线段树模板)
  11. Qweb Pdf 中添加 图片
  12. 会员管理系统适用于哪些行业
  13. python爬取微信公众号_python爬取微信公众号
  14. Android Studio 获取Shal值
  15. 勒索病毒修复SQL数据库修复文档文件服务器中毒远程处理数据恢
  16. python中 math.isfinite返回值为false_Python math.isfinite() 方法
  17. 思科认证和华为认证交换机环路的产生原因和解决方法-ielab实验室
  18. uni-app实现扫码功能
  19. 高稳定性、低延时、支持多路的实时流媒体播放器之EasyPlayer.js在直播时隐藏倍速播放按钮操作方法
  20. 海康威视错误代码说明

热门文章

  1. Java 打 jar 包时,MANIFEST.MF 文件详解
  2. SpringCloud局部过滤器自定义
  3. popupwindow 不抢夺焦点_央视专访“上个厕所就要3000块”的亲历者, 被“坑”的不愉快经历...
  4. php domdocument getelementbyid,PHP DOMDocument- getElementByID添加Â代替空
  5. linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
  6. java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践
  7. 指标实现层级_企业如何构建核心指标系统,实现业务运营效率提升90%?
  8. C vector详解
  9. java文件读写详细介绍_java文件读写操作大全
  10. 飞畅科技教你如何快速选择工业网管poe交换机?