BZOJ3161 : 孤舟蓑笠翁

显然求出每个点到所有关键点的最短路和次短路即可,答案就是每个关键点的次短路。

设$f[i][j][0]$表示左手在$i$,右手在$j$的解,$f[i][j][1]$表示左手在$i$,右手在$j$,且左手已经动了右手还没开始动的解,然后BFS即可。

时间复杂度$O(n(n+m))$。

#include<cstdio>
const int N=1010,M=10010;
int n,m,K,dmi,dma,i,j,k,x,y,z,vip[N][N],ans[N*N],e[2][N],v[M],nxt[M],ed,h,t,q[N*N*4][5];
struct P{int x,y;P(){}P(int _x,int _y){x=_x,y=_y;}}a[N],f[N][N][2],g[N][N][2];
inline void read(int&a){char c;while(!(((c=getchar())>=‘0‘)&&(c<=‘9‘)));a=c-‘0‘;while(((c=getchar())>=‘0‘)&&(c<=‘9‘))(a*=10)+=c-‘0‘;}
inline void add(int&x,int y){v[++ed]=y;nxt[ed]=x;x=ed;}
inline int abs(int x){return x>0?x:-x;}
inline bool check(int x,int y){
  int d=abs(a[x].x-a[y].x)+abs(a[x].y-a[y].y);
  return dmi<=d&&d<=dma;
}
inline void ext(int x,int y,int z,int a,int b){
  if(!z&&!check(x,y))return;
  if(g[x][y][z].y)return;
  if(f[x][y][z].y==b)return;
  q[++t][0]=x,q[t][1]=y,q[t][2]=z,q[t][3]=a,q[t][4]=b;
  if(!f[x][y][z].y)f[x][y][z]=P(a,b);else g[x][y][z]=P(a,b);
}
int main(){
  read(n),read(m),read(dmi),read(dma);
  for(i=1;i<=n;i++)read(a[i].x),read(a[i].y);
  read(K);
  for(i=1;i<=K;i++)read(x),read(y),vip[x][y]=i;
  while(m--){
    read(x),read(y),read(z);
    add(e[z][x],y),add(e[z][y],x);
  }
  for(i=1;i<=n;i++)add(e[0][i],i),add(e[1][i],i);
  for(h=i=1;i<=n;i++)for(j=1;j<=n;j++)if(vip[i][j])ext(i,j,0,0,vip[i][j]);
  while(h<=t){
    x=q[h][0],y=q[h][1],z=q[h][2],j=q[h][3]+1-z,k=q[h++][4];
    for(i=e[z][z?y:x];i;i=nxt[i])ext(z?x:v[i],z?v[i]:y,z^1,j,k);
  }
  for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(vip[i][j])ans[vip[i][j]]=g[i][j][0].y?g[i][j][0].x:-1;
  for(i=1;i<=K;i++)printf("%d\n",ans[i]);
  return 0;
}

  

时间: 2024-07-29 00:23:28

BZOJ3161 : 孤舟蓑笠翁的相关文章

冬天的雪

时光,从一缕清风中飘然而过,散发出幽幽的暗香,在四季轮回的罅隙中,缓缓地步入了冬季.冬,蕴含着深邃悠远的意韵:雪,舞动着空灵曼妙的风姿.静静聆听雪花飘落的声音,感受那份宁静幽美的意境. 让我们从古人的诗情画意中,去细细品味雪带给人们的那种空寂悠远的意境吧. "千山鸟飞绝,万径人踪灭,孤舟蓑笠翁,独钓寒江雪."柳宗元的一首<江雪>,描绘了一幅动人的画面.在白雪覆盖的江面上,一叶小舟,一个披蓑戴笠的老渔翁,独自在寒冷的江心垂钓.天地间空旷寂静,彰显了渔翁的清高与孤傲. 张岱的&

OSChina 娱乐弹弹弹——程序猿的悲催爱情史诗

今天我们继续来淫诗作对,听说 8 号有全月食,哪个妹子要与我一起赏月? 在吟诗之前,我们先看看昨天一位 OSCer 的重大发现,你现在知道你为什么那么喜欢 OSC 了吗? 啦啦啦,我们开始吟诗吧- 举头望明月,低头写程序.       但愿人长久,天天写程序.       垂死病中惊坐起,我的程序没写完.       小扣门扉久不开,主人在家写程序.       少小离家老大回,程序无改鬓毛衰.       唧唧复唧唧,木兰写程序.       白发三千丈,缘bug改不完.       日暮乌啼

移动互联网时代:你的厕所文学是什么?

记得我腰挂PP机时,我的厕所文学是<故事会>或<知音>,被里面稀奇古怪乱七八糟的感人故事所激动得忘了身上重任,后来有了手机,还是诺基亚232和3310的时候,我的厕所文学有时候是<读者>,有时候是<南方周末>,读者是一个煽情的杂志,我如今骨子里拥有的一些爱心和感恩估计是那时培育的,南方周末是一份理性大胆的报纸,它培养了我愤青的一面,当然偶尔也会蹲阅墙壁或门上那些极具创意和天赋的涂鸦文字,它们拓宽了偶的视野.感谢厕所文学陪伴着我度过了宝贵的青春岁月. 那么,如

C# Tcp协议收发数据(TCPClient发,Socket收)

运行这个程序前需要先关闭Windows防火墙,Win7系统关闭防火墙的方法是在控制面板的"控制面板\系统和安全\Windows 防火墙\自定义设置"路径中,将"家庭或工作(专用)网络位置设置"和"公用网络位置设置"下面的选项都选到"关闭Windows防火墙(不推荐)". 1.界面设计 左侧为发送数据的输入框,单击"发送数据"把数据发送到指定IP地址的指定端口号.(本例中,IP地址和端口号都被写死到代码中)

【专题】偏序,扫描线

[关键字]偏序,数点,树状数组,线段树,扫描线. 因为涉及多种算法,所以整合到一起. [扫描线] 二维数点,偏序 ★数点问题 ★关于偏序问题的一些总结 一维偏序:排序二分 树状数组 二维偏序:排序扫描线+树状数组(差分)/线段树 三维偏序:排序扫描线+cdq分治+树状数组 排序扫描线+二维数据结构 基本思想是一维扫描线顺序扫描维护差分,一维用数据结构维护区间(线段树维护区间,树状数组差分维护前缀和). [BZOJ3161]布娃娃(扫描线+线段树) BZOJ 4059 Cerc2012 Non-b

怎样有效提高记忆力?

周筠 ,虚晃一枪. 陈甫鸼等 747 人赞同 我是坚定的“最浅的墨水胜过最深的记忆”党人.这辈子永不退党,哈哈. 读书记不住,可能原因有两点. 一,那是你不得不读的书:二,你没有随手做点笔记的习惯. 拿我自己来讲,如果是我想读的书,我才不会正襟危坐从头读起,我会快速翻页,找自己感兴趣的章节.关键词.图片,从最有兴趣的地方读起.比如,最近两天出差,读完了陈平原的书从文人之文到学者之文 (豆瓣) .300多页的书,一阵乱翻后,从顾炎武开始看,然后又跳到前面看张岱,接着又跑到后面看黄宗羲,继而跑到前面

一曲肝肠断,天涯何处寻代码o

小生初来乍到,谨以一首小诗向奋斗在兄弟连前线的各位战友致敬. 满园春色关不住 一串代码飘出来.日照屏幕直冒烟, 遥看代码挂前川.9春眠不觉晓,处处敲代码.春宵一刻值千金,完事起来敲代码.洛阳亲友如相问,就说我在敲代码.夜阑卧听风吹雨,做梦还在敲代码.举头望明月,低头敲代码.君当做磐石,我愿敲代码.商女不知亡国恨,一天到晚敲代码.小扣门扉久不开,主人在家敲代码.人面不知何处去,原来伊在敲代码.孤舟蓑笠翁,独自敲代码.风萧萧兮易水寒,壮士要去敲代码.松下问童子,言师敲代码.白发三千丈,BUG改不完.

敲代码

满园春色关不住 一串代码飘出来.日照屏幕直冒烟, 遥看代码挂前川.春眠不觉晓,处处敲代码.春宵一刻值千金,完事起来敲代码.洛阳亲友如相问,就说我在敲代码.夜阑卧听风吹雨,做梦还在敲代码.举头望明月,低头敲代码.君当做磐石,我愿敲代码.商女不知亡国恨,一天到晚敲代码.小扣门扉久不开,主人在家敲代码.人面不知何处去,原来伊在敲代码.孤舟蓑笠翁,独自敲代码.风萧萧兮易水寒,壮士要去敲代码.松下问童子,言师敲代码.白发三千丈,BUG改不完.座中BUG谁最多,江州司马青衫湿.两个BUG鸣翠柳,一行代码上西

C# Tcp协议收发数据

运行这个程序前需要先关闭Windows防火墙,Win7系统关闭防火墙的方法是在控制面板的“控制面板\系统和安全\Windows 防火墙\自定义设置”路径中,将“家庭或工作(专用)网络位置设置”和“公用网络位置设置”下面的选项都选到“关闭Windows防火墙(不推荐)”. 1.界面设计 左侧为发送数据的输入框,单击“发送数据”把数据发送到指定IP地址的指定端口号.(本例中,IP地址和端口号都被写死到代码中) 2.程序代码 using System; using System.Collections