[bzoj2574] [Poi1999]Store-Keeper

  坑啊。。

  膜了半天byvoid大爷的题解。https://www.byvoid.com/blog/poi-1999-mag/?replytocom=1335/

  一开始从人的位置bfs一波,看看能走到初始包裹哪些方向上。要注意不能穿过初始包裹...byvoid的标程在处理穿过包裹什么的地方有问题...但数据略弱。

  之后如题解所述。

  发现自己不会求点双连通分量QAQ。。那部分就抄标程了...

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<cstring>
  4 #include<algorithm>
  5 using namespace std;
  6 const int maxn=10023;
  7 const int xx[4]={-1,1,0,0},yy[4]={0,0,-1,1};
  8 struct zs{int too,pre;}e[maxn<<2];int tot,last[maxn];
  9 int too[2333333],pre[2333333],la[maxn],tt,st1[maxn],top,cnt,st2[maxn],uuu[103][103][4][4];bool uu[maxn];
 10 struct poi{int x,y;}S,T,M;
 11 struct zs1{int x,y,dir;}dl[maxn<<2];
 12 int dfn[maxn],low[maxn],tim;
 13 bool gd[maxn],u[maxn];
 14 int id[103][103],dis[103][103][4],q[maxn];
 15 char mp[103][103];
 16 int i,j,k,n,m,man,st,ed;
 17
 18 inline void ins(int a,int b){
 19     int i=la[a];
 20     while(i&&too[i]!=b)i=pre[i];
 21     if(i)return;
 22     too[++tt]=b,pre[tt]=la[a],la[a]=tt;
 23 }
 24 inline bool same(int a,int b){
 25     int i;bool flag;
 26     for(i=la[a];i;i=pre[i])uu[too[i]]=1;
 27     for(i=la[b];i&&!uu[too[i]];i=pre[i]);
 28     flag=i!=0;
 29     for(i=la[a];i;i=pre[i])uu[too[i]]=0;
 30     return flag;
 31 }
 32 inline bool canget(int x,int y,int dir1,int dir2){
 33     if(!gd[id[x][y]])return 1;
 34     if(uuu[x][y][dir1][dir2]<0)
 35         return (uuu[x][y][dir1][dir2]=same( id[x+xx[dir1]][y+yy[dir1]] , id[x+xx[dir2]][y+yy[dir2]] ));
 36     else return uuu[x][y][dir1][dir2];
 37 }
 38 void tarjan(int x,int fa){
 39     dfn[x]=low[x]=++tim;int too,u,v;
 40     for(int i=last[x];i;i=e[i].pre)if(dfn[e[i].too]<dfn[x]){
 41         too=e[i].too;
 42         if(!dfn[too]){
 43             st1[++top]=x,st2[top]=too;
 44             tarjan(too,x),low[x]=min(low[x],low[too]);
 45             if(low[too]>=dfn[x]){
 46                 gd[x]=1;
 47                 cnt++;
 48                 do{
 49                     u=st1[top],v=st2[top],
 50                     ins(u,cnt),ins(v,cnt),top--;
 51                 }while((u!=x||v!=too)&&(u!=too||v!=x));
 52             }
 53         }
 54         else low[x]=min(low[x],dfn[e[i].too]);
 55     }
 56 }
 57
 58 inline void insert(int a,int b){
 59     e[++tot].too=b,e[tot].pre=last[a],last[a]=tot,
 60     e[++tot].too=a,e[tot].pre=last[b],last[b]=tot;
 61 }
 62
 63 inline bool check(int x,int y){return x>0&&y>0&&x<=n&&y<=m&&mp[x][y]!=‘S‘;}
 64
 65 inline void bfs(int s){
 66     int l=0,r=1,i,now;q[1]=s,u[s]=1;
 67     while(l<r)
 68         for(i=last[now=q[++l]];i;i=e[i].pre)if(!u[e[i].too]&&e[i].too!=st)
 69             u[e[i].too]=1,q[++r]=e[i].too;
 70 }
 71 inline int run(){
 72     int l=0,r=0,i,nx,ny,ndir,ndis,x,y;
 73     for(i=0;i<4;i++){
 74         x=S.x+xx[i],y=S.y+yy[i];
 75         if(check(x,y)&&u[id[x][y]])dl[++r]=(zs1){S.x,S.y,i},dis[S.x][S.y][i]=1;//,printf("st:%d,%d\n",x,y);
 76     }
 77     while(l<r){
 78         l++,nx=dl[l].x,ny=dl[l].y,ndir=dl[l].dir,ndis=dis[nx][ny][ndir];
 79         x=nx+xx[ndir^1],y=ny+yy[ndir^1];//printf("case:%d,%d  dis:%d  dir:%d\n",nx,ny,ndis,ndir);
 80         if(!check(x,y))continue;
 81         if(x==T.x&&y==T.y)return ndis;
 82         for(i=0;i<4;i++)
 83             if(check(x+xx[i],y+yy[i])&&!dis[x][y][i]&&canget( x,y,ndir,i ))
 84                 dis[x][y][i]=ndis+1,dl[++r]=(zs1){x,y,i};
 85     }
 86     return -233;
 87 }
 88 int main(){
 89     memset(uuu,200,sizeof(uuu));
 90     scanf("%d%d",&n,&m);int tmp=0;tot=1;
 91     for(i=1;i<=n;i++){
 92         scanf("%s",mp[i]+1);
 93         for(j=1;j<=m;j++)if(mp[i][j]!=‘S‘){
 94             id[i][j]=++tmp;
 95             for(k=0;k<4;k+=2){
 96                 int x=i+xx[k],y=j+yy[k];
 97                 if(check(x,y))
 98                     insert(id[i][j],id[x][y]);//,printf("(%d,%d)-->(%d,%d)\n",x,y,i,j);
 99             }
100             if(mp[i][j]==‘M‘)man=tmp,M=(poi){i,j};
101             if(mp[i][j]==‘P‘)st=tmp,S=(poi){i,j};
102             if(mp[i][j]==‘K‘)ed=tmp,T=(poi){i,j};
103         }
104     }//return 233;
105     for(i=1;i<=tmp;i++)if(!dfn[i])tarjan(i,0);
106 //  for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(id[i][j]){
107 //      if(mp[i][j]!=‘S‘)printf("(%d,%d)  %d   fa:%d\n",i,j,id[i][j],getfa(id[i][j]));
108 //      if(gd[id[i][j]])printf("        gd:  (%d,%d)\n",i,j);
109 //  }
110     bfs(man);
111     int ans=run();
112     if(ans<0)puts("NO");else printf("%d\n",ans);
113 }

时间: 2024-10-14 07:03:56

[bzoj2574] [Poi1999]Store-Keeper的相关文章

ZOJ 2601 Warehouse Keeper(费用流)

ZOJ 2601 Warehouse Keeper The company where Jerry works owns a number of warehouses that can be used to store various goods. For each warehouse the types of goods that can be stored in this warehouse are known. To avoid problems with taxes, each ware

10.8.5如何升级(app store 出错 请稍后重试 100)

出现问题:苹果以前的老版本,OS X 10.8或是10.8.5在当年提示你升级,你又任性没升级的时候,拖过那阵,你再想升级,就是各种报复.进app store下载或是更新东西都是弹出app stpre 出错,请稍候重试 (100),然后再提示说此系统不支持银联. 现在已经是OS X 10.11了,今天接手了一个老古董,系统才OS X 10.8,按照提示升到了OS X 10.8.5,之后不管怎么点,都没法,百度了一下,10.8.5升级,瞎折腾了好久,网上的方法就一个,搞个安装包.最后还是折腾出来了

IOS上架App Store商店步骤

苹果官方在2015年05-06月开发者中心进行了改版,网上的APP Store上架大部分都不一样了,自己研究总结一下,一个最新的上架教程以备后用. 原文地址:http://www.16css.com/blog/knowledge/1300.html 1.1.前期工作 首先你需要有一个苹果的开发者帐号,一个Mac系统. 如果没有帐号可以在打开http://developer.apple.com/申请加入苹果的开发者计划.支付99美元每年,怎么申请网上有详细的介绍,在此不多做介绍. 如果你已经有了一

App Store审核条款更新(安全部分)

无论是对于iOSapp开发者还是老板来说,苹果应用商店审核条款都是极其重要的,在这次的WWDC2016大会后,苹果苹果公司发布了四个全新平台:iOS,macOS,watchOS和tvOS.并且在此之后,苹果应用商店审核条款也同时进行了更新--貌似不算进行了更新,简直就是重写!上个版本的30个章节被修改成了5大章节,但原版英文版字数从5000多个英文单词增加到了6000多个英文单词. 对于苹果应用来说,安全是首要的,所以我们先来看看对于苹果来说,什么样的应用是安全的?当我们的iOS app上传时,

lucene中Field.Index,Field.Store的一些设置

lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED)); Field有两个属性可选:存储和索引. 通过存储属性你可以控制是否对这个Field进行存储: 通过索引属性你可以控制是否对该Field进行索引. 事实上对这两个属性的正确组合很重要. Field.Index Field.Store 说明 TOKENIZED(分词) YES 被分词索引且存储 TOKE

Red style books store OpenCart 主题模板 ABC-0117

Red style books store OpenCart 主题模板 ABC-0117 RED STYLE BOOKS STORE OPENCART 主题模板 ABC-0117 Designed with luxurious colorsSuitable for shop selling: Books , templates, Card, picture, Art, Photography..Designed by CSS, HTMLSupports multiple languages, m

Attractive Music Store OpenCart 自适应主题模板 ABC-0237

Attractive Music Store OpenCart 自适应主题模板 ABC-0237 模板特性 OpenCart版本1.5.5, 1.5.5.1, 1.5.6, 1.5.6.1, 1.5.6.2, 1.5.6.3, 1.5.6.4 包含文件PHP Files, CSS Files, JS Files 详情地址http://www.chinaopencart.cn/index.php?route=product/product&product_id=374

Pav Metro Store OpenCart 自适应主题模板 ABC-0215

Pav Metro Store OpenCart 自适应主题模板 ABC-0215 模板特性 OpenCart版本 1.5.4.1, 1.5.5, 1.5.5.1, 1.5.6 包含文件 PHP Files, CSS Files, JS Files,PSD Files

Cannot read property &#39;Store&#39; of undefined nodejs express session

Express在使用mongodb的时候app配置出错!  "Cannot read property 'Store' of undefined" 原因主要是express版本4++问题 //settings.js module.exports={ cookieSecret:"xxxx", db:"dbname", host:"localhost", } //app.js var express = require("