点击打开链接

题意: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. 解剖JavaScript中的null和undefined
  2. 基于全局场景背景图和关系优化的全景3D场景理解(ICCV 2021)
  3. 书籍:Python机器学习蓝图第2版 Python Machine Learning Blueprints 2nd - 2019.pdf
  4. Playmaker全面实践教程之简单的使用Playmaker示例
  5. P1991 无线通讯网
  6. ElementUI 添加修改提示成功后 如何刷新表格数据展示
  7. 正则表达式获取一个文本域中每一行的值并且去掉前后空格
  8. 动态规划之91 decode ways
  9. java和vb.net des加密_vb.net DES加密与解密
  10. Web页面自动化执行,Java+Selenium3.0-Mac OS环境搭建
  11. Unity编辑器工具简体繁体一键转换
  12. st语言和c语言一样,什么是ST语言,一文带你了解ST语言
  13. ubuntu server 20.04安装vnc远程桌面xfce4
  14. 阿里面试题:鹿晗发布恋情,为什么微博挂了?
  15. import image的坑
  16. Docker 书籍在线阅读(Docker 从入门到实践)
  17. 开源Linux面板-1Panel
  18. Openwrt chaos_calmer 版本在Ubuntu18上编译问题汇总
  19. SpringBoot的启动类显示的是个方框而不是叶子形状
  20. 打开sqlite3文件方法

热门文章

  1. CSP直通车 | 在线直播认证培训双周末班 火热报名中
  2. linux如何查看硬盘的转速
  3. cam350菜单怎么切换成中文_电子设计软件CAM350各菜单使用说明(二)
  4. 打开注册表编辑器的方法及常见问题解决
  5. 学习进度报告【第二周】
  6. 推荐:移动应用开发的过去、现在和未来
  7. 大学计算机英语句子,万能句大学英语句子大全
  8. win10+uefi+gpt安装一键GHOST之后无法重启的快速解决方法(无需重装系统无需修复引导)
  9. 学习笔记(一)贝叶斯公式
  10. 游戏原创声音该如何鉴定呢?