Lotus Leaves
题目链接:Lotus Leaves
但是我们暴力连边是O(n ^ 3)的。考虑优化:我们可以把每一条竖着的,横着的抽出来,然后就变成O(n ^ 2)了。没什么难度。
#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相关推荐
- ARC 074F Lotus Leaves 最大流最小割
点击打开链接 题意:n*m地图 n,m<=100,起点S,终点T 'o'表示叶子,每次可以跳到同行或者同列的'o'上,问最少删掉多少个'o'使得S无法到达T? 先把图按照x,y分成两部分,每行每 ...
- [最小割] ARC 074 F - Lotus Leaves
Solution Solution 这样建图:对每一行每一列都建一个点,连向行内的荷叶. 那这道题就相当于删去最少的点使得源汇点不连通. 按这里一样建图就好了. 又忘记写当前弧优化了 #include ...
- 中餐和西餐菜名大全(zt)
凉菜 cold dish 冷盘 cold dish 拼盘 assorted cold foods; hors d'oeuvres; assorted appetizers 凉拼盘 assorted c ...
- 【AtCoder】ARC074
ARC 074 C - Chocolate Bar 直接枚举第一刀横切竖切,然后另一块要求如果横切分成\(H / 2\)竖切分成\(W/2\)即可 #include <bits/stdc++.h ...
- 曾国藩九言,读必收益甚多。
查看全文 http://www.taodudu.cc/news/show-6622006.html 相关文章: 曾国藩修身十二法 曾国藩六戒 曾国藩人生〝六戒〞 曾国藩:六戒 曾国藩六戒-送给自己和大 ...
- Linux下搭建Lotus Domino集群
Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...
- pat1004. Counting Leaves (30)
1004. Counting Leaves (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A fam ...
- UVA699 下落的树叶 The Falling Leaves(二叉树的递归遍历建树)
UVA699 下落的树叶 The Falling Leaves bool型的函数一定不能忘了组后要加上return 1;或者return 0;!!!! #include<bits/stdc++. ...
- Lotus的书买回来了
今天拿到了在当当上买的书,Lotus 7的维护管理,准备花一点时间好好读一遍. 转载于:https://blog.51cto.com/rosetea/131234
最新文章
- Android外设存储设备的访问及测试
- Logstash安装与测试
- Swift--基本数据类型(二)
- 机动车驾驶人科目三考试项目及合格标准
- 为什么软件测试容易被小看,做软件测试容易忽视的问题
- pycharm检测不到python编译器_1.2 搭建python+pycharm编程开发环境
- 六石管理学:行政人员也要学会使用SVN保存文档
- html flash rtmp,Web直播之RTMP协议:vue-video-player + videojs-flash
- 手机软件测试linux,手机终端软件测试浅析
- 安卓能硬改的手机机型_免root伪装手机型号,算是硬改吧,技术原理!
- python sql注入检测脚本_python 打造一个sql注入脚本 (一)
- vscode为python文件添加模板
- 大数据 百亿级实时查询 ClickHouse SQL mysql canal kafka 数据实时同步
- 【第十一篇】Flowable中的各种网关
- 一位Rust中年低颅压头疼患者的自救之路
- 假期出游带上华为Mate X3 ,创新体验让旅途欢乐不间断~
- 笔记本电脑wifi连接网络不能上网有感叹号
- nmap渗透测试--版本探测
- 《云边协同关键技术态势研究报告》丨附下载
- Vue最常见的面试题以及答案