S连“。”流量为1

二分答案 x

算出每一个门到每一个点的距离若小于x连边 流量为1

门连T 流量为 x

其实这个题完全不用拆点

因为门限制的流量为x

若有x个点和门的dis<x

每个点到门的距离肯定<=x

而且dis=x的点最多有一个

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<iostream>
#include<algorithm>
#define T 99999
using namespace std;
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
int t[T];
int head[444],nxt[T],lst[T],v[T];
int id[33][33],mx[444],my[444];
int dis[33][33],q[T][2],S,W,h[T];
char s[33][33];int D[444];
int n,m,tot=1,cnt,top,pl,sum;
void insert(int x,int y,int z)
{//cout << x <<" "<< y <<" "<< z << endl;lst[++tot]=y; nxt[tot]=head[x]; head[x]=tot; v[tot]=z;lst[++tot]=x; nxt[tot]=head[y]; head[y]=tot; v[tot]=0;
}
void bfs(int xx,int yy,int f)
{memset(dis,0,sizeof(dis));int l=1,r=2; q[1][0]=xx,q[1][1]=yy;while(l<r){int x=q[l][0],y=q[l++][1];for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(s[nx][ny]=='.'){if(!dis[nx][ny]){dis[nx][ny]=dis[x][y]+1;if(dis[nx][ny]<=f){q[r][0]=nx,q[r++][1]=ny;insert(id[nx][ny],id[xx][yy],1);}}}}}
}
bool BFS()
{for(int i=1;i<=W;i++)D[i]=0;D[S]=1;int l=1,r=2;h[1]=S;while(l<r){int x=h[l++];for(int i=head[x];i;i=nxt[i])if(v[i]>0&&!D[lst[i]]){D[lst[i]]=D[x]+1;h[r++]=lst[i];}}return D[W]!=0;
}
int dfs(int x,int f)
{int ww=0,w;if(x==W)return f;for(int i=head[x];i;i=nxt[i])if(v[i]&&D[lst[i]]==D[x]+1){w=dfs(lst[i],min(v[i],f-ww));ww+=w;v[i]-=w,v[i^1]+=w;if(f==ww)return ww;}return ww;
}
bool jud(int x)
{memset(head,0,sizeof(head));tot=1;for(int i=1;i<=top;i++)bfs(mx[i],my[i],x);//system("pause");for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(s[i][j]=='.')insert(S,id[i][j],1);for(int i=1;i<=top;i++)insert(id[mx[i]][my[i]],W,x);int ans=0;while(BFS())ans+=dfs(S,T);return ans==sum;
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%s",s[i]+1);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(s[i][j]!='X'){id[i][j]=++cnt;if(s[i][j]=='D'){mx[++top]=i;my[top]=j;}}S=cnt+1,W=S+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(s[i][j]=='.')sum++;int l=0,r=sum,ans=0;while(l<=r){int mid=(l+r)>>1;if(jud(mid))ans=mid,r=mid-1;else l=mid+1;}if(!ans)printf("impossible");else cout << ans;
}

BZOJ 1189: [HNOI2007]紧急疏散evacuate|网络流|二分答案相关推荐

  1. bzoj1189 [HNOI2007]紧急疏散evacuate(二分答案+bfs+最大流判是否满流)

    首先bfs处理出每个人到每个门所需的时间.然后二分答案,对于所有人能到的所有门,建边,边权为1,从源点向所有人建边,边权为1,从所有门向汇点建边,边权为mid(最多出去mid个人),dinic跑最大流 ...

  2. 【枚举】【二分答案】【分块答案】【BFS】【最大流】【Dinic】bzoj1189 [HNOI2007]紧急疏散evacuate...

    [法一]枚举Time(0~N*M): S->'.'(1); 'D'->T(Time); '.'->'D'(dis(用BFS预处理,注意一旦到达'D',BFS就不能继续扩展了,注意di ...

  3. bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  4. BZOJ 1305 dance跳舞(最大流+二分答案)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1305 解题思路: 转自:https://blog.csdn.net/u012288458 ...

  5. Bzoj 3343: 教主的魔法(分块+二分答案)

    3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...

  6. bzoj1189 [HNOI2007]紧急疏散EVACUATE spfa+网络流+二分

    这个题是非常暴力的匹配问题. 首先最好想的思路是给每个人分门的决策, 每个人到每个门的距离直接暴力最短路即可 但不能算出一个门被多个人经过的情况 所以就有了暴力的想法,再给每个人.对每一个门分配一个时 ...

  7. bzoj 1189 紧急疏散 网络流

    二分答案,网络流判断 将每个门拆点,每个人连向每个门的dis~当前解 然后跑最大流,如果等于人数,即为可行解 #include<cstdio> #include<iostream&g ...

  8. BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)

    字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...

  9. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  10. bzoj3993 [SDOI2015]星际战争 二分答案+网络流检验

    流量分配模型. 这个题如果时间不知道的话流量是未知的,对于流量未知的网络流肯定是没法做的(没有动态借流量的网络流) 由于时间上满足连续性,就可以二分答案,然后流量确定就可以跑网络流 主要还是化静为动 ...

最新文章

  1. React使用ES6语法重构组件代码
  2. 总结一下各种IO方式
  3. seaborn系列 (12) | 增强箱图boxenplot()
  4. spring-data-redis版本冲突引发的问题
  5. 太强了! 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT
  6. 技术系列课|“主动降噪”到底有多厉害?
  7. react设置默认props
  8. 感悟琐记:业绩=资源的n次方
  9. 关于函数指针调用C++非静态成员
  10. Hadoop Balancer运行速度优化
  11. C# 数据类型 数据转换 自己的见解和方式
  12. linux+时间戳+ns,时间戳转换工具
  13. 数码照片的Photoshop清晰化处理漫谈-photoshop-Photoshop-天极Yesky
  14. 统计学_显著性检验综述
  15. 三年级计算机学打字备课,小学信息技术三年级下册《15请计算机教我学打字认识打字软件》课件.ppt...
  16. Ubuntu下U盘只读文件系统,图标上锁,文件无法写入
  17. 再仔细读读react18官方文档吧 20220526
  18. 教你优雅绕开百度网盘限速机制
  19. 基于iSensor的MT9M001C12STM传感器调试总结
  20. STM32硬件AES

热门文章

  1. 超维空间鸿蒙大宇,高维空间的存在不仅能够统一基本力,还为时空穿越提供了可能!...
  2. java基本类型的小把戏
  3. coc跑团san数值规则_【规则】克苏鲁coc跑团游戏术语/黑话,第三篇教学。
  4. 大冬与小冉的故事 !!!-----阿冬专栏
  5. python输出数组类型_python输出数组中指定元素的所有索引示例
  6. DYNAMIC DETECTION
  7. 实验 3 熟悉常用的 HDFS 操作
  8. 分享:蛋花儿主题WordPress瀑布流 V1.05(收费版)
  9. excel 操作技巧
  10. flutter 返回键监听