解题:SHOI 2012 回家的路
完了,做的时候已经想不起来分层图这个东西了QAQ
对于这种“多种”路径加中转站的题,还有那种有若干次“特殊能力”的题,都可以考虑用分层图来做
显然只需要记录所有的中转站+起点终点,然后拆出横竖两层,一层的点之间连值为$2$的边,每个站的两层之间连值为$1$的边,然后再跑最短路。注意数组大小,还有起点和终点的两层是连零边的
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,inf=0x3f3f3f3f;
struct a
{
int xx,yy,id;
}mem[N];
struct b{int node,dist;};
bool operator < (b x,b y)
{
return x.dist>y.dist;
}
priority_queue<b> hp;
int val[*N],dis[*N],vis[*N];
int p[*N],noww[*N],goal[*N];
int n,m,t1,t2,st,ed,cnt,tot;
bool cmp1(a x,a y)
{
return x.xx==y.xx?x.yy<y.yy:x.xx<y.xx;
}
bool cmp2(a x,a y)
{
return x.yy==y.yy?x.xx<y.xx:x.yy<y.yy;
}
void link(int f,int t,int v)
{
noww[++cnt]=p[f],p[f]=cnt;
goal[cnt]=t,val[cnt]=v;
}
void Dijkstra(int s)
{
memset(dis,0x3f,sizeof dis);
dis[s]=,hp.push((b){s,});
while(!hp.empty())
{
b tt=hp.top(); hp.pop(); int tn=tt.node;
if(vis[tn]) continue ; vis[tn]=true;
for(int i=p[tn];i;i=noww[i])
if(dis[goal[i]]>dis[tn]+val[i])
dis[goal[i]]=dis[tn]+val[i],hp.push((b){goal[i],dis[goal[i]]});
}
}
int main ()
{
scanf("%d%d",&n,&m),st=++m,ed=++m;
link(st,st+m,),link(st+m,st,);
link(ed,ed+m,),link(ed+m,ed,);
for(int i=;i<=ed;i++)
{
scanf("%d%d",&mem[i].xx,&mem[i].yy);
mem[i].id=++tot,link(tot,tot+m,),link(tot+m,tot,);
}
sort(mem+,mem++tot,cmp1);
for(int i=;i<=st;i++)
if(mem[i].xx==mem[i+].xx)
{
link(mem[i].id,mem[i+].id,*(mem[i+].yy-mem[i].yy));
link(mem[i+].id,mem[i].id,*(mem[i+].yy-mem[i].yy));
}
sort(mem+,mem++tot,cmp2);
for(int i=;i<=st;i++)
if(mem[i].yy==mem[i+].yy)
{
link(mem[i].id+m,mem[i+].id+m,*(mem[i+].xx-mem[i].xx));
link(mem[i+].id+m,mem[i].id+m,*(mem[i+].xx-mem[i].xx));
}
Dijkstra(st),dis[ed]>=inf?printf("-1"):printf("%d",dis[ed]);
return ;
}
解题:SHOI 2012 回家的路的更多相关文章
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- 分层图最短路【bzoj2834】: 回家的路
分层图最短路[bzoj2834]: 回家的路 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2834 这道题难在建边. 自己写的时候想到了 ...
- bzoj 2834: 回家的路
题目 F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser DCOI Logout 捐赠本站 Notice:1 ...
- P3831 [SHOI2012]回家的路
P3831 [SHOI2012]回家的路 分层图基础题,就是建图稍有麻烦 #include<cstdio> #include<algorithm> #include< ...
- [转]9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...
- (转)9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
原文:http://www.cnblogs.com/figure9/archive/2013/01/09/2853649.html 1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也 ...
- [SHOI2012]回家的路
题目背景 SHOI2012 D2T1 题目描述 2046 年 OI 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由2n2n条地铁线路构成,组成了一个nn纵nn横的交通网.如 ...
- [SHOI2012]回家的路 最短路
---题面--- 题解: 吐槽:找了好久的错,换了n种方法,重构一次代码,,,, 最后发现,,, 数组开小了,其实一开始尝试开大了数组,但唯独没有尝试开大手写队列的数组.... 思路: 有两种方法,这 ...
随机推荐
- jsp内置对象 转发与重定向的区别
jsp 内置对象 转发与重定向的比较 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重 ...
- IPC_Binder_java_1
title: IPC_Binder_java_1 date: 2017-01-03 21:30:55 tags: [IPC,Binder] categories: [Mobile,Android] - ...
- 方正 ignb路由器设置备份(自用笔记)
192.168.15.96255.255.255.0192.168.15.1219.232.46.61219.141.136.10
- dmesg命令详解
基础命令学习目录 http://linux.cn/article-3587-1.html dmesg 命令的使用范例 下面我们展示一些最负盛名的‘dmesg’命令工具以及其实际使用举例.‘dmesg’ ...
- wcf服务查看工具
文章:接口测试工具soapUI(一) 文章:VS自带WCF测试客户端简单介绍
- angularJS1笔记-(13)-自定义指令(controller和controllerAs实现通信)
index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- bash简介1
bash脚本语言文件格式 第一行#!/bin/bash :定义bash脚本解释器 注释信息:# 代码注释: 缩进,适度添加空白行 bash中的变量介绍: 局部变量 本地变量 环境变量 位置参数 ...
- [BUAA_SE_2017]代码复审-Week2
代码复审 CheckList 1.概要部分 代码能符合需求和规格说明么? 符合,经过-c及-s合法参数测试,程序均能生成.求解相应数独. 代码设计是否有周全的考虑? 对于非法输入,程序处理不够周全. ...
- HDU 2140 Michael Scofield's letter
http://acm.hdu.edu.cn/showproblem.php?pid=2140 Problem Description I believe many people are the fan ...
- Java 文件下载功能 解决中文乱码
Html部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...