预处理出每个点上下左右能延伸到的最远点以及到它们的距离的最小值md。

然后spfa,一个点除了可以以1的代价到达四周的点之外,还可以以md+1的代价到达四个方向能到达的最远点。

#include<cstdio>
const int N=1010,M=4194303;
int n,m,i,j,z,x,y,loc[N][N][4],dis[N][N][4],md[N][N],d[N][N],q[M+1][2],h,t;
bool a[N][N],in[N][N];char s[N];
inline void add(int x,int y){
if(!a[x][y]||d[x][y]<=z)return;
d[x][y]=z;
if(!in[x][y]){
in[x][y]=1;
if(z<d[q[h][0]][q[h][1]])h=(h+M)&M,q[h][0]=x,q[h][1]=y;else t=(t+1)&M,q[t][0]=x,q[t][1]=y;
}
}
int main(){
for(scanf("%d%d",&n,&m),i=1;i<=n;i++)for(scanf("%s",s+1),j=1;j<=m;j++){
a[i][j]=s[j]!='#',d[i][j]=~0U>>1;
if(s[j]=='S')d[i][j]=0,h=t=in[i][j]=1,q[1][0]=i,q[1][1]=j;
if(s[j]=='C')x=i,y=j;
}
for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(a[i][j]){
if(a[i-1][j])loc[i][j][0]=loc[i-1][j][0],dis[i][j][0]=dis[i-1][j][0]+1;else loc[i][j][0]=i;
if(a[i][j-1])loc[i][j][1]=loc[i][j-1][1],dis[i][j][1]=dis[i][j-1][1]+1;else loc[i][j][1]=j;
}
for(i=n;i;i--)for(j=m;j;j--)if(a[i][j]){
if(a[i+1][j])loc[i][j][2]=loc[i+1][j][2],dis[i][j][2]=dis[i+1][j][2]+1;else loc[i][j][2]=i;
if(a[i][j+1])loc[i][j][3]=loc[i][j+1][3],dis[i][j][3]=dis[i][j+1][3]+1;else loc[i][j][3]=j;
md[i][j]=dis[i][j][0];
if(md[i][j]>dis[i][j][1])md[i][j]=dis[i][j][1];
if(md[i][j]>dis[i][j][2])md[i][j]=dis[i][j][2];
if(md[i][j]>dis[i][j][3])md[i][j]=dis[i][j][3];
}
while(((t+1)&M)!=h){
i=q[h][0],j=q[h++][1],h&=M,in[i][j]=0,z=d[i][j]+1;
add(i-1,j),add(i+1,j),add(i,j-1),add(i,j+1);
z+=md[i][j];
add(loc[i][j][0],j),add(i,loc[i][j][1]),add(loc[i][j][2],j),add(i,loc[i][j][3]);
}
return printf("%d",d[x][y]),0;
}

  

BZOJ3919 : [Baltic2014]portals的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. BZOJ 3916: [Baltic2014]friends( hash )

    字符串哈希..然后枚举每一位+各种判断就行了 ----------------------------------------------------------------------------- ...

  3. 学习React系列(七)——Fragments、Portals、Error Boundaries与WEB组件

    React.Fragment portals Error Boundaries WEB组件 React.Fragment 想象一个场景,想把td包装为组件添加到table中去,代码如下: class ...

  4. BZOJ_3916_[Baltic2014]friends_hash

    BZOJ_3916_[Baltic2014]friends_hash 题意: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到 ...

  5. Angular动态创建组件之Portals

    这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...

  6. react 插槽(Portals)

    前言: 昨天刚看了插槽,以为可以解决我工作中遇到的问题,非常激动,我今天又仔细想了想,发现并不能解决... 不过还是记录一下插槽吧,加深印象,嗯,就酱. 插槽作用: 插槽即:ReactDOM.crea ...

  7. Codeforces 196E Opening Portals MST (看题解)

    Opening Portals 我们先考虑如果所有点都是特殊点, 那么就是对整个图求个MST. 想在如果不是所有点是特殊点的话, 我们能不能也 转换成求MST的问题呢? 相当于我们把特殊点扣出来, 然 ...

  8. react portals

    来源:https://segmentfault.com/a/1190000011668286 Portals是react 16.3 提供的官方解决方案,使得组件可以脱离父组件层级挂载在DOM树的任何位 ...

  9. C - Portals Gym - 102006C (网络流最小割)

    题目链接:https://cn.vjudge.net/contest/283918#problem/C 题目大意:T个测试数据,然后给你一个字符串,每一个字符串包括‘s’,‘t’,‘o’,‘#’,‘. ...

随机推荐

  1. DrawText

    该函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐.折行等).   int DrawText(HDC hDC, // 设备描述表句柄 LPCTSTR lpStri ...

  2. linux zookeeper 原理详解

    http://cailin.iteye.com/blog/2014486  直接打开此链接即可 --------------------------------------------------   ...

  3. Android中多个调用Activity的问题

    <application android:allowBackup="true" android:icon="@drawable/ic_launcher" ...

  4. Mysql函数集合

    Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...

  5. ICMP-type对应表

    一次在某个防火墙配置策略里看到如下的代码: iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A FORWARD -p icmp ...

  6. 《转》VS2012发布网站详细步骤

    本文转载自MannyGuo 如果给您带来不便请联系博主 1.打开你的VS2012网站项目,右键点击项目>菜单中 重新生成一下网站项目:再次点击右键>发布: 2.弹出网站发布设置面板,点击& ...

  7. css+div绝对定位

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  8. 【原创】sql:慎用【数字字段1 - 数字字段2】这样的sql(10-null = null)mysql

    如果只有一个表的情况下 a表: id num1,num2 1 10 5 2 10 0 3 20 0 select id, num1,num2,num1 - num2 AS subNum from a; ...

  9. JS操作DOM

    [功能:点击按钮显示表单] <html> <head> <meta http-equiv="Content-Type" content="t ...

  10. eoe项目结构

    ├ cn.eoe.app –存放程序全局性类的包├ cn.eoe.app.adapter –存放适配器的实现类的包 ├ cn.eoe.app.adapter.base –存放适配器基类的包├ cn.e ...