传送门

题解

至今没看懂这深搜怎么写的……

 //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 机器人路径规划问题的更多相关文章

  1. 洛谷P1126 机器人搬重物

    洛谷1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格, ...

  2. V-rep学习笔记:机器人路径规划2

    路径规划问题是机器人学研究的一个重要领域,它是指给定操作环境以及起始和目标的位置姿态,要求选择一条从起始点到目标点的路径,使运动物体(移动机器人或机械臂)能安全.无碰撞地通过所有的障碍物而达到目标位置 ...

  3. ROS机器人路径规划介绍--全局规划

    ROS机器人路径规划算法主要包括2个部分:1)全局路径规划算法:2)局部路径规划算法: 一.全局路径规划 global planner ROS 的navigation官方功能包提供了三种全局路径规划器 ...

  4. 机器人路径规划其一 Dijkstra Algorithm【附动态图源码】

    首先要说明的是,机器人路径规划与轨迹规划属于两个不同的概念,一般而言,轨迹规划针对的对象为机器人末端坐标系或者某个关节的位置速度加速度在时域的规划,常用的方法为多项式样条插值,梯形轨迹等等,而路径规划 ...

  5. 机器人路径规划其二 A-Star Algorithm【附动态图源码】

    首先要说明的是,机器人路径规划与轨迹规划属于两个不同的概念,一般而言,轨迹规划针对的对象为机器人末端坐标系或者某个关节的位置速度加速度在时域的规划,常用的方法为多项式样条插值,梯形轨迹等等,而路径规划 ...

  6. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  7. V-rep学习笔记:机器人路径规划1

     Motion Planning Library V-REP 从3.3.0开始,使用运动规划库OMPL作为插件,通过调用API的方式代替以前的方法进行运动规划(The old path/motion ...

  8. 洛谷p1052过河 路径压缩+dp

    洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...

  9. 洛谷P2542 [AHOI2005]航线规划(LCT,双连通分量,并查集)

    洛谷题目传送门 太弱了不会树剖,觉得LCT好写一些,就上LCT乱搞,当LCT维护双连通分量的练手题好了 正序删边是不好来维护连通性的,于是就像水管局长那样离线处理,逆序完成操作 显然,每个点可以代表一 ...

随机推荐

  1. temp3

  2. ClientDataSet1.LoadFromStream

    lStream3.Position := 0;        lDataSet.LoadFromStream(lStream3);

  3. linux rz -e

    linux shell rz和sz是终端下常用的文件传输命令,rz和sz通过shell被调用,其中rz用于从启用终端的系统上传文件到目标系统(终端登录的目标系统), 这里不过多介绍这些命令,只是记录一 ...

  4. spring中aop原理

  5. Mediator模式

    [Mediator模式] 通过mediator来让各个相互通知的对象解耦.在iOS框架中就是NSNotificationCenter. 参考:http://www.jdon.com/designpat ...

  6. mongo 修改器 $inc/$set/$unset/$pop/$push/$pull/$addToSet

    mongo $inc 可以对集合里面的某些值是数字的增减.看代码 $set  可以进行修改,并且不存在的时候默认添加. 同时还能该变数据的类型. 还可以该变内嵌元素的值 用.调用 $unset  删除 ...

  7. 使用Layered Window遇到的一些问题及解决方法

    1. 使用Layered Window需要设置 WS_EX_LAYERED 属性 2.  Layered Window不能作为Child Window 3. 它也不能包含子窗口,为什么呢,因为它收不到 ...

  8. 598. Range Addition II 矩阵的范围叠加

    [抄题]: Given an m * n matrix M initialized with all 0's and several update operations. Operations are ...

  9. 性能优化之_android多线程

    本文大纲为: 如何创建线程 线程间如何通讯 线程间如何安全的共享信息 一.线程的创建 Thread在run方法中执行具体事务,或者传入一个runnable对象,但是不能调用view控件的更新方法,但是 ...

  10. gitlab-ci配置疑难备忘

    最近在自搭的gitlab服务器上加上了ci,大部份操作都比较顺利,但是也碰到一些问题抓狂,记录如下. 1.关于一个project配多个runner:在gitlab-ci里是支持的,但是含义确有点反常, ...