点击打开链接

题意:n*m地图 n,m<=100,起点S,终点T 'o'表示叶子,每次可以跳到同行或者同列的'o'上,问最少删掉多少个'o'使得S无法到达T?

先把图按照x,y分成两部分,每行每列加上源点和汇点,两边点分别为1~n,1~m
对叶子'o'(x,y):x-y连接一条边 表示第x行的叶子可以跳到第y列 流量为1:表示删除(x,y)这一个点 
加上边 S->SX S-SY TX->T,TY->T 容量为inf 不能删除
答案显然为最大流 否则s->t存在增广路径 
现在只要求出从S->T的最大流即可,因为最大流时的图,无增广路即,S->T不存在路径,对应的s-t割为最小割,容量最小.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
const int N=3e2+5;
const ll inf=2e15;
const ll mod=1e9+7;
char s[N][N];
ll n,m,g[N][N];
ll path[N],flow[N],start,End;
queue<int> q;
void init()
{memset(g,0,sizeof(g)); for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(s[i][j]=='S'){g[0][i]=inf;g[0][n+j]=inf;    }if(s[i][j]=='T'){g[i][n+m+1]=inf;g[n+j][n+m+1]=inf;}if(s[i][j]=='o')g[i][n+j]=1,g[n+j][i]=1;}}
}ll bfs()
{while(!q.empty())q.pop();memset(path,-1,sizeof(path));path[start]=0,flow[start]=inf;q.push(start);while(!q.empty()){int t=q.front();q.pop();if(t==End)break;for(int i=1;i<=n+m+1;i++){if(i!=start && path[i]==-1 && g[t][i]){flow[i]=min(flow[t],g[t][i]);q.push(i);path[i]=t;}}}if(path[End]==-1)    return -1;return flow[End];
}
ll Edmonds_Karp()
{ll mx_flow=0,step,now,pre;while((step=bfs())!=-1)//找不到增广路退出 {mx_flow+=step;now=End;while(now!=start){pre=path[now];g[pre][now]-=step;//更新正向边容量g[now][pre]+=step;//更新反向边(Gf走反向边 相当于在G中减小该边流量) now=pre;}}return mx_flow;
}
int main()
{while(cin>>n>>m){for(int i=1;i<=n;i++)scanf("%s",s[i]+1);init();//建图 start=0,End=n+m+1;ll ans=Edmonds_Karp();//答案显然为最大流 否则s->t存在增广路径 if(ans>=inf)puts("-1");elsecout<<ans<<endl;}return 0;
}

ARC 074F Lotus Leaves 最大流最小割相关推荐

  1. Lotus Leaves

    题目链接:Lotus Leaves 显然是一个最小割模型. 但是我们暴力连边是O(n ^ 3)的.考虑优化:我们可以把每一条竖着的,横着的抽出来,然后就变成O(n ^ 2)了.没什么难度. AC代码: ...

  2. hihocoder 网络流二·最大流最小割定理

    网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...

  3. nyoj 677 碟战(最大流最小割定理)

    碟战 时间限制:2000 ms  |  内存限制:65535 KB 难度:4 描述 知己知彼,百战不殆!在战争中如果被敌人掌握了自己的机密,失败是必然的.K国在一场战争中屡屡失败,就想到自己的某些城市 ...

  4. 洛谷 - P2598 [ZJOI2009]狼和羊的故事(最大流最小割)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,每个格子都有三种状态:狼.羊和空地,现在需要在相邻方格之间添加篱笆,问最少需要添加多少篱笆才能使得狼和羊分开 题目分析:最大流最小割,建图方 ...

  5. matlab实现图割算法中的最大流最小割Max-flow/min-cut问题(一)

    转载自:http://blog.csdn.net/on2way/article/details/43276155 本篇主要介绍matlab实现Max-flow/min-cut的方法,介绍一种只实现了M ...

  6. 算法小白理解最大流最小割(Maximum flow Minimum cut)问题

    网上流传的关于最大流最小割问题的全都是索然无味 的一些讲课视频,当然如果你英语能力很强,直接看外国的视频也十分好理解,但于我这种理工科渣渣来说,看懂那种专业的讲课视频是不可能的,不存在的,所以把自己对 ...

  7. 最大流最小割定理(max flow/min cut theory)

    百度文库里面有个地址,讲的比较详细. http://wenku.baidu.com/link?url=gPXhYCduLNgZaOkKIltNDAgPGwuMTpRX7a0utvVFuqDAP9o1j ...

  8. matlab求最小割,matlab實現圖割算法中的最大流最小割Max-flow/min-cut問題(一)

    本篇主要介紹matlab實現Max-flow/min-cut的方法,介紹一種只實現了Max-flow/min-cut的工具箱Bk_matlab. 一:最大流最小割的由來 了解這個問題之前先說說這個問題 ...

  9. 网络流 最大流最小割与最小费用流

    目录 [镇楼] [引入] [基本定义和概念] [最大流算法] [最小割] [最小费用最大流] [引用] [镇楼]   天啦真的好好懂!!!麻麻再也不用担心我的网络流学习啦!!! [引入] 首先,我们来 ...

最新文章

  1. linux串口工具 SRT,汇编语言实现串口通信(PC和单片机间).doc
  2. Tensorflow2.x.x最基础的神经网络(ANN)
  3. 不会这几个库,都不敢说我会Python爬虫
  4. Mongodb固定集合
  5. html制作柱状图教程,基于Echarts的HTML5 Canvas折线图柱状图DEMO演示
  6. petshop4.0 详解之五(PetShop之业务逻辑层设计)
  7. matlab 鼠标自定义选中图像的任意区域
  8. 网友直呼太贵!华为nova 8系列发布:麒麟985+66W快充
  9. 雷军发布会罕见爆粗口:这XXX绝对是来捣乱的!
  10. 设某微型计算机内存ram区,微机原理第三章习题.doc
  11. 都说互联网寒冬,有人却获一线大厂六枚Offer,他是怎么做到的?
  12. 微软MVP总结的Windows XP优化大全
  13. Java POI 删除最后一页空白页
  14. 高效能人士的七个习惯-第二章-阅读
  15. Unity射线检测指定Layer的物体
  16. 国产划片机 晶圆精密切割机制造商
  17. python 正则表达式 断言 不定长表达式_【教程】详解Python正则表达式之: (?!…) negative lookahead assertion 前向否定匹配 /前向否定断言...
  18. 解决获取微信用户信息 48001错误
  19. 梦如繁花,无奈花开花谢花无常 伤感古典日志
  20. 傅里叶变换 卷积定理 空域模板转换为频域模板

热门文章

  1. python发送邮件和POP3、SMTP及IMA
  2. ucosii任务三要素---执行代码 堆栈 任务控制块
  3. 10个对web开发人员有用的HTML文件上传技巧
  4. 伪网易云-web前端
  5. IJCAI 2021 | 会议摘要有难度?快来引入对话篇章结构信息
  6. 医疗器械追溯系统有多重要
  7. 如何用公式编辑器打分段函数公式?
  8. 央视爆光微信打飞机流量门事件的思考
  9. insgram 网页分享_iOS - 实现Instagram分享
  10. BurpSuit抓包HTTP响应报文