题目链接:Lotus Leaves


显然是一个最小割模型。

但是我们暴力连边是O(n ^ 3)的。考虑优化:我们可以把每一条竖着的,横着的抽出来,然后就变成O(n ^ 2)了。没什么难度。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int inf=0x3f3f3f3f;
const int N=2e4+300,M=2e6+10;
int n,m,s,t,h[N]; char g[N][N];
int head[N],nex[M],to[M],w[M],tot=1;
inline void ade(int a,int b,int c){to[++tot]=b; nex[tot]=head[a]; w[tot]=c; head[a]=tot;}
inline void add(int a,int b,int c){ade(a,b,c);  ade(b,a,0);}
inline int id(int x,int y){return (x-1)*m+y;}
inline int bfs(){queue<int> q; q.push(s); memset(h,0,sizeof h); h[s]=1;while(q.size()){int u=q.front(); q.pop();for(int i=head[u];i;i=nex[i]) if(w[i]&&!h[to[i]]) h[to[i]]=h[u]+1,q.push(to[i]);}return h[t];
}
int dfs(int x,int f){if(x==t) return f;   int fl=0;for(int i=head[x];i&&f;i=nex[i]){if(w[i]&&h[to[i]]==h[x]+1){int mi=dfs(to[i],min(w[i],f));w[i]-=mi,w[i^1]+=mi,fl+=mi,f-=mi;}}if(!fl)  h[x]=-1;return fl;
}
inline int dinic(){int res=0;while(bfs())  res+=dfs(s,inf);return res;
}
signed main(){cin>>n>>m; t=2e4+275;for(int i=1;i<=n;i++)   scanf("%s",g[i]+1);for(int i=1;i<=n;i++)  for(int j=1;j<=m;j++){add(id(i,j),id(i,j)+n*m,1);if(g[i][j]=='S')   add(s,id(i,j)+n*m,inf);if(g[i][j]=='T')    add(id(i,j),t,inf);if(g[i][j]!='.'){add(id(i,j)+n*m,n*m*2+i,inf);add(n*m*2+i,id(i,j),inf);add(id(i,j)+n*m,n*m*2+n+j,inf);add(n*m*2+n+j,id(i,j),inf);}}int maxflow=dinic();if(maxflow>=0x3f3f3f3f)   return puts("-1"),0;cout<<maxflow<<endl;  return 0;
}

Lotus Leaves相关推荐

  1. ARC 074F Lotus Leaves 最大流最小割

    点击打开链接 题意:n*m地图 n,m<=100,起点S,终点T 'o'表示叶子,每次可以跳到同行或者同列的'o'上,问最少删掉多少个'o'使得S无法到达T? 先把图按照x,y分成两部分,每行每 ...

  2. [最小割] ARC 074 F - Lotus Leaves

    Solution Solution 这样建图:对每一行每一列都建一个点,连向行内的荷叶. 那这道题就相当于删去最少的点使得源汇点不连通. 按这里一样建图就好了. 又忘记写当前弧优化了 #include ...

  3. 中餐和西餐菜名大全(zt)

    凉菜 cold dish 冷盘 cold dish 拼盘 assorted cold foods; hors d'oeuvres; assorted appetizers 凉拼盘 assorted c ...

  4. 【AtCoder】ARC074

    ARC 074 C - Chocolate Bar 直接枚举第一刀横切竖切,然后另一块要求如果横切分成\(H / 2\)竖切分成\(W/2\)即可 #include <bits/stdc++.h ...

  5. 曾国藩九言,读必收益甚多。 ​

    查看全文 http://www.taodudu.cc/news/show-6622006.html 相关文章: 曾国藩修身十二法 曾国藩六戒 曾国藩人生〝六戒〞 曾国藩:六戒 曾国藩六戒-送给自己和大 ...

  6. Linux下搭建Lotus Domino集群

    Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...

  7. pat1004. Counting Leaves (30)

    1004. Counting Leaves (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A fam ...

  8. UVA699 下落的树叶 The Falling Leaves(二叉树的递归遍历建树)

    UVA699 下落的树叶 The Falling Leaves bool型的函数一定不能忘了组后要加上return 1;或者return 0;!!!! #include<bits/stdc++. ...

  9. Lotus的书买回来了

    今天拿到了在当当上买的书,Lotus 7的维护管理,准备花一点时间好好读一遍. 转载于:https://blog.51cto.com/rosetea/131234

最新文章

  1. Android外设存储设备的访问及测试
  2. Logstash安装与测试
  3. Swift--基本数据类型(二)
  4. 机动车驾驶人科目三考试项目及合格标准
  5. 为什么软件测试容易被小看,做软件测试容易忽视的问题
  6. pycharm检测不到python编译器_1.2 搭建python+pycharm编程开发环境
  7. 六石管理学:行政人员也要学会使用SVN保存文档
  8. html flash rtmp,Web直播之RTMP协议:vue-video-player + videojs-flash
  9. 手机软件测试linux,手机终端软件测试浅析
  10. 安卓能硬改的手机机型_免root伪装手机型号,算是硬改吧,技术原理!
  11. python sql注入检测脚本_python 打造一个sql注入脚本 (一)
  12. vscode为python文件添加模板
  13. 大数据 百亿级实时查询 ClickHouse SQL mysql canal kafka 数据实时同步
  14. 【第十一篇】Flowable中的各种网关
  15. 一位Rust中年低颅压头疼患者的自救之路
  16. 假期出游带上华为Mate X3 ,创新体验让旅途欢乐不间断~
  17. 笔记本电脑wifi连接网络不能上网有感叹号
  18. nmap渗透测试--版本探测
  19. 《云边协同关键技术态势研究报告》丨附下载
  20. Vue最常见的面试题以及答案

热门文章

  1. spell_errors
  2. webots与Matlab联合仿真中的错误记录(1)
  3. 【嵌入式】MX283A开机
  4. 数论基础(1)扩展欧几里得定理
  5. Android 2.2播放mp4视频提示“是无效的流媒体”的问题
  6. CSS伪元素的基本使用
  7. 一个高并发买票的实例
  8. Comsol5.5 简单管道声场特性仿真
  9. c语言设置随机函数,C语言随机函数(c语言随机函数rand怎么用)
  10. 虚拟机上安装macOS big sur