bzoj

sol

先预处理每个状态是否合法。记\(dis[i][j]\)表示从任意一个绝招点到达左手在\(i\)右手在\(j\)这个状态的最小步数,以及\(vis[i][j]\)表示是从哪一个绝招点转移过来的。这一步可以\(bfs\)实现,复杂度\(O((n+m)^2)\)。
然后再枚举两个相邻状态,如果两个状态的\(vis\)不同,那么就可以更新这两个绝招点的答案。
可以理解为从每个绝招点开始扩张,当遇到“接壤”时即意味着两个绝招点在最短路上相遇。

code

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gi(){int x=0,w=1;char ch=getchar();while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();if (ch=='-') w=0,ch=getchar();while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return w?x:-x;
}
#define cmin(a,b) (a>b?a=b:a)
const int N = 1005;
struct Graph{int to[N*10],nxt[N*10],head[N],cnt;void link(int u,int v){to[++cnt]=v,nxt[cnt]=head[u],head[u]=cnt;}
}G1,G2;
int n,m,k,mn,mx,x[N],y[N],ok[N][N],q[2][N*N],hd,tl,vis[N][N],dis[N][N],ans[N*100];
int main(){n=gi();m=gi();mn=gi();mx=gi();for (int i=1;i<=n;++i) x[i]=gi(),y[i]=gi();for (int i=1;i<=n;++i)for (int j=1;j<=n;++j){int len=abs(x[i]-x[j])+abs(y[i]-y[j]);if (len>=mn&&len<=mx) ok[i][j]=1;}k=gi();for (int i=1;i<=k;++i){q[0][i]=gi();q[1][i]=gi();vis[q[0][i]][q[1][i]]=i;}for (int i=1;i<=m;++i){int u=gi(),v=gi(),t=gi();if (!t) G1.link(u,v),G1.link(v,u);else G2.link(u,v),G2.link(v,u);}for (int i=1;i<=n;++i) G1.link(i,i),G2.link(i,i);hd=1,tl=k;while (hd<=tl){int u=q[0][hd],v=q[1][hd++];for (int i=G1.head[u];i;i=G1.nxt[i])for (int j=G2.head[v];j;j=G2.nxt[j]){int uu=G1.to[i],vv=G2.to[j];if (!ok[uu][vv]||vis[uu][vv]) continue;vis[uu][vv]=vis[u][v];dis[uu][vv]=dis[u][v]+1;q[0][++tl]=uu;q[1][tl]=vv;}}memset(ans,63,sizeof(ans));for (int u=1;u<=n;++u)for (int v=1;v<=n;++v)for (int i=G1.head[u];i;i=G1.nxt[i])for (int j=G2.head[v];j;j=G2.nxt[j]){int uu=G1.to[i],vv=G2.to[j];if (!vis[u][v]||!vis[uu][vv]) continue;if (vis[u][v]!=vis[uu][vv]){int len=dis[u][v]+dis[uu][vv]+1;cmin(ans[vis[u][v]],len);cmin(ans[vis[uu][vv]],len);}}for (int i=1;i<=k;++i) printf("%d\n",ans[i]==ans[0]?-1:ans[i]);return 0;
}

转载于:https://www.cnblogs.com/zhoushuyu/p/9307332.html

[BZOJ3161]孤舟蓑笠翁相关推荐

  1. BZOJ3161: 孤舟蓑笠翁

    将一个合法(即哈密顿距离在[dmin,dmax]内)的点对(p,q)视为一个点 问题变成在一个边权全部为1的无向图中,有一些关键点,求每个关键点到离它最近的关键点的距离 这个问题有个经典的bfs做法 ...

  2. BZOJ3161 : 孤舟蓑笠翁

    显然求出每个点到所有关键点的最短路和次短路即可,答案就是每个关键点的次短路. 设$f[i][j][0]$表示左手在$i$,右手在$j$的解,$f[i][j][1]$表示左手在$i$,右手在$j$,且左 ...

  3. 【BFS】lydsy3161 孤舟蓑笠翁

     题目描述很详细了,不多说了.  今天因为很粗心的bug肝到了这么晚,真的惨.  这道题一开始想知道是状态当点,也知道是广搜,但是显然直接广搜会T.想不出来,忍不住查阅了一下题解(天哪我怎么这么菜), ...

  4. bzoj 3161: 孤舟蓑笠翁 bfs

    显然,可以把左手在i点,右手在j点缩成一个状态(想到这个就基本结束了),那么去掉不合法的状态之后,可以根据停顿点的移动条件得到一个状态可以转移到那些状态.这就相当于一个图,而边权都是1,然后要求的就是 ...

  5. 使用openpyxl去操作Excel表格

    对表格的数据写操作: from openpyxl import Workbook wb=Workbook()w1=wb.create_sheet('index',0) # w1["E4&qu ...

  6. 多媒体技术创新开启“科技+文化”新“视”界

    新华网北京10月21日电(盖博铭 王潇蒙)影视公司整合人工智能等技术提升老电影清晰度.全息影像可"还原"文物古迹.自媒体直播开启互动模式--多媒体技术串联起科技创新与文化产业创新, ...

  7. 商女不知亡国恨,一天到晚敲代码

    满园春色关不住 一串代码飘出来. 日照屏幕直冒烟, 遥看代码挂前川. 春眠不觉晓,处处敲代码. 春宵一刻值千金,完事起来敲代码. 洛阳亲友如相问,就说我在敲代码. 夜阑卧听风吹雨,做梦还在敲代码. 举 ...

  8. 三、Python-列表

    三.Python-列表 一.序列:是一块用于存放多个值的连续内存空间,并且按一定顺序排列,可以通过索引取值 索引:从左到右的索引从0开始依次增加的正整数:从右到左的索引为-1开始的复数 切片(分片): ...

  9. Java基础---方法1

    方法1 具有特殊功能的一段代码,可以通过名字重复调用.提高了代码的重用性.封装性,简化程序设计.方法的定义:public static 返回值类型 方法名(形式参数列表) {方法语句;}位置:在类中, ...

最新文章

  1. 前端优化方案-JavaScript 优化方案 收藏 此文于2010-06-04被推荐到CSDN首页
  2. js代码计算济南出租车打车费用
  3. 使用 TDD 测试驱动开发来构建 Laravel REST API
  4. OpenCV学习笔记-关于使用Mat.at(i,j) = int 语法报错
  5. linux win10虚拟内存,高手解惑win10系统电脑虚拟内存不足的还原技巧
  6. Asp.net 定时任务
  7. MAC报错:-bash: mysqlbinlog : command not found
  8. [转载]互联网扫描器 ZMap 完全手册
  9. 你在公司项目里面看过哪些操蛋的代码?
  10. r语言计算行列式的值
  11. C: 编译错误:fatal error: gnu/stubs-32.h: No such file or directory;bad register name `%rsp‘
  12. C语言/C++基础之大炮打飞机
  13. 7步走!做出高质量的数据分析项目
  14. 在MDK 中忽略(suppress) 某一个警告
  15. 微信小程序在组件中刷新当前页面
  16. “小智特惠” Android版已经登录各大电子市场,欢迎试用
  17. 致那些徘徊在测试界的屌丝
  18. CC00038.python——|HadoopPython.v02|——|Arithmetic.v02|Pandas数据分析库:Pandas数据结构|
  19. 【javaEE】网络初识
  20. 关于完美主义和拖沓症

热门文章

  1. 区块链技术的应用有哪些?
  2. C# WaitAll 等待所有线程执行完毕
  3. Realtek USB无线网卡能搜到WiFi 无法连接到网络
  4. IT行业就业前景如何
  5. PostgreSQL11 | pgadmin4基本使用
  6. [WebView] - WebView leaked
  7. 火狐浏览器屏蔽百度热榜的方法
  8. Metasploitable渗透测试实战:ms17-010
  9. bom成本分析模型_如何计算一台汽车的BOM成本?
  10. 程序人生 - 如何绘制二维码?