[BZOJ2834]回家的路
Description
Input
Output
Sample Input
1 2
1 1 2 2
Sample Output
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]回家的路相关推荐
- 2012年的第一天 自己独自踏上回家的路 木有任何人相送
2012年的第一天 自己独自踏上回家的路 木有任何人相送 转载于:https://www.cnblogs.com/grh-valentine-boy/archive/2012/01/02/231030 ...
- do vis是什么意思_BBC听力: 2020年2月8日 小宠物为什么可以找到回家的路
节目介绍 BBC 6 Minute-English 是BBC针对全球英语学习者推出的一款谈话类学习节目.每期一个时尚的话题,两个播音员以聊天的形式进行讲解,包括核心词汇讲解.内容活泼有趣,语速适中,适 ...
- 记住回家的路-周国平
生活在今日的世界上,心灵的宁静不易得.这个世界既充满着机会,也充满着压力.机会诱惑人去尝试,压力逼迫人去奋斗,都使人静不下心来.我不主张年轻人拒绝任何机会,逃避一切压力,以闭关自守的姿态面对世界.年轻 ...
- 记住回家的路(周国平)
生活在今日的世界上心灵的宁静不易得.这个世界既充满着机会,也充满着压力.机会诱惑人去尝试,压力逼迫人去奋斗,都使人静不下心来.我不主张年轻人拒绝任何机会,逃避一切压力,以闭关自守的姿态面对世界.年轻的 ...
- 我们都一直行走在出走和回归的轮回里,每一步都是离开,每一步都是回来,每一条离家的路都是回家的路,每一座坟墓都是母亲。
我们在年轻的时候都背负着梦想离开家乡去远方流浪,所有的思念都让我们的旅行更加遥远和不可追回,然而直到我们觉得自己可以昂首回归的时候,家乡其实已经不复存在了,邻家的姑娘早已嫁人,我们出生的老房子已经拆 ...
- 【文学文娱】《回家的路-人生的来路》
本文地址:https://www.cnblogs.com/aiweixiao/p/9902038.html 原文地址(微信公众号):<回家的路-人生的来路> 扫描关注微信公众号 火车的轰鸣 ...
- [趣味定理]喝醉的酒鬼总能找到回家的路,喝醉的小鸟则可能永远也回不了家。
证明定理:喝醉的酒鬼总能找到回家的路,喝醉的小鸟则可能永远也回不了家.假设有一条水平直线,从某个位置出发,每次有 50% 的概率向左走1米,有50%的概率向右走1米.按照这种方式无限地随机游走下去,最 ...
- 【反传销】春节一个短暂误入传销和脱身的真实故事以及对技术的思考(二)回家之路...
阅读目录 3.回家之路 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 日常工具与其它文章目录:http://www ...
- 女儿的画作-《回家的路》
女儿拿起画笔和颜料,在一张大纸上涂鸦,最终一句"这是小小回家的路",震惊了我们所有人...以下是小小的作品: 回家的路,我们看一下抽象主义大师杰克森.波洛克的作品: 错综复杂的网络 ...
最新文章
- 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)
- 天转凉了,注意保暖,好吗(需求规格说明书放在github了)
- erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...
- 总帐科目的批量传输与复制
- java中break和continue的用法例子
- Java:汇总堆外数据
- java入门的注意点_Java基础之Integer使用的注意事项及面试题
- [转] Mou 一个Markdown工具 语法规则文档(最后)
- 小米推出售价 19999 元的 MIX Alpha;高通已向华为重启供货;.NET Core 3.0 发布 | 极客头条...
- 【JSOI2014】【BZOJ5039】序列维护(线段树模板)
- Qweb Pdf 中添加 图片
- 会员管理系统适用于哪些行业
- python爬取微信公众号_python爬取微信公众号
- Android Studio 获取Shal值
- 勒索病毒修复SQL数据库修复文档文件服务器中毒远程处理数据恢
- python中 math.isfinite返回值为false_Python math.isfinite() 方法
- 思科认证和华为认证交换机环路的产生原因和解决方法-ielab实验室
- uni-app实现扫码功能
- 高稳定性、低延时、支持多路的实时流媒体播放器之EasyPlayer.js在直播时隐藏倍速播放按钮操作方法
- 海康威视错误代码说明
热门文章
- Java 打 jar 包时,MANIFEST.MF 文件详解
- SpringCloud局部过滤器自定义
- popupwindow 不抢夺焦点_央视专访“上个厕所就要3000块”的亲历者, 被“坑”的不愉快经历...
- php domdocument getelementbyid,PHP DOMDocument- getElementByID添加Â代替空
- linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
- java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践
- 指标实现层级_企业如何构建核心指标系统,实现业务运营效率提升90%?
- C vector详解
- java文件读写详细介绍_java文件读写操作大全
- 飞畅科技教你如何快速选择工业网管poe交换机?