题目:Matrix

之所以能够用最大流解决这个问题,关键在于最大流可以求解下面这个函数的最小值:

接下来就分析一下如何用最大流求解上面这个函数的极值。

首先xi一共只有两种选择,那么最终可以按xi的取值将xi划分成两个集合,那么如果xi在值为1的集合里,xj在值为0的集合里,那么就会

产生一个代价cij。同时如果xi选择0就会产生一个bi的代价,如果xi选择1就会产生一个ai的代价。于是构造一个源点S,汇点T做最小

割,不妨假设做完最小割之后值为1的xi的集合是和S相连的部分,值为0的xi的集合是和T相连的部分。

由于表达式中有三项,我们用三种割边来分别描述这三项的值。一种是xi选择了1,这样就不能选择0,需要把xi-T这条边割掉,由于xi

选择1会产生ai的代价,那么就把这条边的容量设为ai。另一种是xi选择了0,这样就不能选择1,需要把S-xi这条边割掉,由于xi选择0会

产生bi的代价,那么就把这条边的容量设为bi。最后一种是xi选择了1,xj选择了0,这样xi和xj不能在同一个集合中,需要把xi-xj这条边割

掉,由于xi选择1,xj选择0产生cij的代价,那么就把这条边的容量设为cij。这样对建好的图做最小割就可以得到上面哪个函数的最小

值。

接着我们分析这个题目如何转化成上面这种模型。首先我们将D的表达式赤裸裸地写出来:

这种形式必然不能看出来和上面那个表达式有什么关系,于是我们继续将其化简:

如果令f等于最后一行括号里的内容,那么发生了什么?如果ai选择0会产生sum{bij}(1<=j<=N)的代价,如果ai选择1会产生ci的代价,如

果ai选择1且aj选择0就会产生bij的代价。这样就完全转化成了上面的模型。

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int N=2050;
const int M=2500000;
const int INF=0x7fffffff;
int e;
int ver[M],next[M],flow[M];
int head[N],work[N],dis[N],q[N];
void init()
{
e=0;
memset(head,-1,sizeof(head));
}
void add(int u,int v,int c)
{
ver[e]=v;flow[e]=c;next[e]=head[u];head[u]=e++;
ver[e]=u;flow[e]=0;next[e]=head[v];head[v]=e++;
}
int bfs(int S,int T)
{
int rear=0;
memset(dis,-1,sizeof(dis));
dis[S]=0;q[rear++]=S;
for(int i=0;i<rear;i++)
{
for(int j=head[q[i]];j!=-1;j=next[j])
{
if(flow[j]&&dis[ver[j]]==-1)
{
dis[ver[j]]=dis[q[i]]+1;
q[rear++]=ver[j];
if(ver[j]==T) return 1;
}
}
}
return 0;
}
int dfs(int cur,int a,int T)
{
if(cur==T) return a;
for(int &i=work[cur];i!=-1;i=next[i])
{
if(flow[i]&&dis[ver[i]]==dis[cur]+1)
{
int t=dfs(ver[i],min(a,flow[i]),T);
if(t)
{
flow[i]-=t;
flow[i^1]+=t;
return t;
}
}
}
return 0;
}
long long Dinic(int S,int T)
{
long long ans=0;
while(bfs(S,T))
{
memcpy(work,head,sizeof(head));
while(int t=dfs(S,INF,T)) ans+=t;
}
return ans;
}
int main()
{
long long sum;
int t,n,x,a,S,T;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
init();
S=0;T=n+1;
sum=0;
for(int i=1;i<=n;i++)
{
a=0;
for(int j=1;j<=n;j++)
{
scanf("%d",&x);
a+=x;
add(i,j,x);
}
sum+=a;
add(S,i,a);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
add(i,T,x);
}
printf("%I64d\n",sum-Dinic(S,T));
}
return 0;
}

HDU4307(最小割)相关推荐

  1. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  2. [学习笔记]最小割之最小点权覆盖最大点权独立集

    最小点权覆盖 给出一个二分图,每个点有一个非负点权 要求选出一些点构成一个覆盖,问点权最小是多少 建模: S到左部点,容量为点权 右部点到T,容量为点权 左部点到右部点的边,容量inf 求最小割即可. ...

  3. POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】

    题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...

  4. 最小割 ---- 2021 ccpc 威海 H city-safety(最大利润 = 最大收益 - 最小花费(最小割))

    题目链接 题目大意: 一棵树,加强第 iii 个点有 wiw_iwi​ 的花费,而如果距离某 个点 ≤p≤ p≤p 的所有点都加强了,则会有 vpv_pvp​ 的收益,求最大净收益. 解题思路: 树形 ...

  5. 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness

    题面: 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科 ...

  6. 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)

    二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...

  7. 最小割 ---- 集合冲突模型 ---- AGC038 F - Two Permutations[详解]

    题目链接 题目大意: 给出两个排列P,QP,QP,Q.要求构造两个排列A,B.A,B.A,B. 要求:AiAiAi要么等于iii,要么等于PiPiPi;BiBiBi要么等于iii,要么等于QiQiQi ...

  8. 最小割 ---- 集合冲突模型

    集合冲突模型 1.问题形式 有 n 个物品和两个集合 S,T.将一个物品放入 S 集合会花费 ai,放入 T 集合会花费 bi.还有若干个形如 u,v,w 限制条件,表示如果 u 和 v 同时不在一个 ...

  9. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2132 是 hydro 的 BZOJ ...

最新文章

  1. shell中join链接多个域_shell 如何实现两个表的join操作
  2. STM32 电机教程 25 - ST MCLIB实战之开环svpwm控制
  3. 【第一行代码笔记】(一)
  4. (事件类型: 警告;事件代码:3005)的解惑
  5. SpringBoot —— Bean的注入方式
  6. PHP-date(),time()函数的应用
  7. 【Flink】FLink 通讯组件 Akka与Actor 模型
  8. Java中print、printf、println的区别(对原文进行缩减,截取对自己有用的)
  9. IE浏览器下常见的CSS兼容问题
  10. 201671030113 李星宇 《英文文本统计分析》结对项目报告
  11. PrintShield打印监控系统
  12. 【论文阅读】提升的自动作文评分通过Prompt预测和匹配
  13. Axure8超详细使用教程(含安装包)
  14. 正规蓝牙耳机一般多少钱?音质好又便宜的蓝牙耳机
  15. 驱动调试-摄像头部分
  16. Sequence to Sequence – Video to Text 论文翻译
  17. error: variable '__this_module' has initializer but incomplete type错误解决
  18. 相关性分析 addmodulescore得到的每个细胞评分与page_enrichments得到的每个细胞评分的相关性
  19. 我和妹妹的“大富翁计划”
  20. 网络攻防技术——黑客攻防

热门文章

  1. CGLib 调用API 及原理分析
  2. 代理模式中的动态代理
  3. SpringBoot另一大神器-Actuator
  4. Redis中的zset 存储结构(实现)原理
  5. 茅塞顿开:Spring Aware原理解析
  6. logback基础配置文件
  7. response的运行过程
  8. 使用域名访问后台页面
  9. 文本编码-Python2.x处理中文字符串
  10. SpringCloud导学