洛谷P2775 机器人路径规划问题
至今没看懂这深搜怎么写的……
//minamoto
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
#define Nosolution ((n==19)?20:30)
const int N=;
int w[N][N];
inline void add(int u,int v){
w[u][++w[u][]]=v;
w[v][++w[v][]]=u;
}
int Brk[N],b[N],lca[N][N],d[N],vis[N],p[N],has[N];
int s,t,n,dep,now;
queue<int> q;
void spfa(int s){
memset(d,0x3f,sizeof(d));
d[s]=,q.push(s),vis[s]=;
while(!q.empty()){
int u=q.front();q.pop();vis[u]=;
for(int i=;i<=w[u][];++i){
int v=w[u][i];
if(d[v]>d[u]+){
d[v]=d[u]+,p[v]=u;
if(!vis[v]) vis[v]=,q.push(v);
}
}
}
}
int cost=;
bool dfs(int deep){
if(b[t]==) return true;
if(deep+lca[now][t]+cost>dep) return false;
for(int i=;i<=Brk[];++i){
int u=Brk[i];
for(int j=;j<=w[u][];++j){
int v=w[u][j];
if(!b[v]){
Brk[i]=v;
if(u==now) now=v;
if(has[u]&&!has[v]&&b[u]!=) --cost;
if(has[v]&&!has[u]&&b[u]!=) ++cost;
swap(b[v],b[u]);
if(dfs(deep+)) return true;
if(has[u]&&!has[v]&&b[v]!=) ++cost;
if(has[v]&&!has[u]&&b[v]!=) --cost;
if(now==v) now=u;
Brk[i]=u;
swap(b[v],b[u]);
}
}
}
return false;
}
int main(){
//freopen("testdata.in","r",stdin);
n=read(),s=read(),t=read();
now=s;
Brk[++Brk[]]=s;
for(int i=;i<n;++i){
b[i]=read()^;
if(b[i]) Brk[++Brk[]]=i;
int s,v;
s=read();
for(int j=;j<s;++j){
v=read();
if(!lca[i][v]&&lca[v][i]){
add(i,v);
}
lca[i][v]=;
}
}
b[s]=;
for(int i=;i<n;++i){
spfa(i);
for(int j=;j<n;++j) lca[i][j]=d[j];
if(i==s){
int u=t;
while(u!=s){
has[u]=;
if(b[u]==) ++cost;
u=p[u];
}
has[s]=;
}
}
for(dep=;dep<=;++dep)
if(dfs()) return printf("%d\n",dep),;
printf("%d\n",Nosolution);
return ;
}
洛谷P2775 机器人路径规划问题的更多相关文章
- 洛谷P1126 机器人搬重物
洛谷1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格, ...
- V-rep学习笔记:机器人路径规划2
路径规划问题是机器人学研究的一个重要领域,它是指给定操作环境以及起始和目标的位置姿态,要求选择一条从起始点到目标点的路径,使运动物体(移动机器人或机械臂)能安全.无碰撞地通过所有的障碍物而达到目标位置 ...
- ROS机器人路径规划介绍--全局规划
ROS机器人路径规划算法主要包括2个部分:1)全局路径规划算法:2)局部路径规划算法: 一.全局路径规划 global planner ROS 的navigation官方功能包提供了三种全局路径规划器 ...
- 机器人路径规划其一 Dijkstra Algorithm【附动态图源码】
首先要说明的是,机器人路径规划与轨迹规划属于两个不同的概念,一般而言,轨迹规划针对的对象为机器人末端坐标系或者某个关节的位置速度加速度在时域的规划,常用的方法为多项式样条插值,梯形轨迹等等,而路径规划 ...
- 机器人路径规划其二 A-Star Algorithm【附动态图源码】
首先要说明的是,机器人路径规划与轨迹规划属于两个不同的概念,一般而言,轨迹规划针对的对象为机器人末端坐标系或者某个关节的位置速度加速度在时域的规划,常用的方法为多项式样条插值,梯形轨迹等等,而路径规划 ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- V-rep学习笔记:机器人路径规划1
Motion Planning Library V-REP 从3.3.0开始,使用运动规划库OMPL作为插件,通过调用API的方式代替以前的方法进行运动规划(The old path/motion ...
- 洛谷p1052过河 路径压缩+dp
洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...
- 洛谷P2542 [AHOI2005]航线规划(LCT,双连通分量,并查集)
洛谷题目传送门 太弱了不会树剖,觉得LCT好写一些,就上LCT乱搞,当LCT维护双连通分量的练手题好了 正序删边是不好来维护连通性的,于是就像水管局长那样离线处理,逆序完成操作 显然,每个点可以代表一 ...
随机推荐
- 转:Python正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- 浅谈 Python 的 with 语句 【转载】
引言 with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用) ...
- JAVA的对称加密算法AES——加密和解密
出自: http://blog.csdn.net/hongtashan11/article/details/6599645 http://www.cnblogs.com/liunanjava/p/42 ...
- 【知识碎片】python 篇
领域:运维 网站 游戏 搜索 嵌入式 C/S软件 Openstack二次开发 绿色版:Portable Python 面向对象.解释型动态语言 env python 切换版也好使,自己寻找系统中pyt ...
- Mesh Filter & Mesh Render
[Mesh Filter] The Mesh Filter takes a mesh from your assets and passes it to the Mesh Renderer for r ...
- zookeeper集群安装的奇怪现象
zookeeper:配置的集群信息是domain:端口2888:端口3888: domain为内网静态ip:每次启动都不能相互连接报错误: [myid:3] - WARN [WorkerSende ...
- SQLSERVER索引在什么情况下会失效
索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件中的 ...
- python-memcached模块
memcache memcache介绍 memcache概念 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库 ...
- 泊松分布 & 指数分布
一.泊松分布 日常生活中,大量事件是有固定频率的. 某医院平均每小时出生3个婴儿 某公司平均每10分钟接到1个电话 某超市平均每天销售4包xx牌奶粉 某网站平均每分钟有2次访问 它们的特点就是,我们可 ...
- Java 设计模式 和七大设计原则
创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 生成器模式(Builder pattern): 使 ...