目录

  • 问题
  • 分析
    • 一般场景
    • 模型转换
    • 构图
  • 代码

问题

  • m个保安监控 n 个钻石。钻石价值 aia_iai​,保安小费 bib_ibi​。小偷若向保安支付小费,则保安放松监控,小偷将偷得钻石。
  • 问:如何支付小费将获得最大收益。
  • 输入:
  • 1
  • 3 3 // n,m
  • 3 4 5 // 钻石的价值
  • 1 2 3 // 小费
  • 101 // 监控第1颗钻石的保安
  • 001
  • 101

分析

一般场景

  • 放弃若干钻石,支付若干保安小费,此时的收益:∑i=1nai−(∑j=1αakj+∑j=1βbkj),1≤α≤n,1≤β≤m\sum_{i=1}^n a_i - ( \sum_{j=1}^\alpha a_{k_j} + \sum_{j=1}^\beta b_{k_j}),1 \leq\alpha\leq n,1 \leq\beta \leq mi=1∑n​ai​−(j=1∑α​akj​​+j=1∑β​bkj​​),1≤α≤n,1≤β≤m
  • 当放弃的钻石价值及支付的小费总和最小时,收益最大
    ∑j=1αakj+∑j=1βbkj\sum_{j=1}^\alpha a_{k_j} + \sum_{j=1}^\beta b_{k_j}j=1∑α​akj​​+j=1∑β​bkj​​

模型转换

  • 最大值 →\rightarrow→ 最小值,转化为最小割
  • 剩余的钻石与未支付小费的保安无关

构图

  • 放弃钻石,等效于删除边
  • 支付小费,等效于删除边
  • 源点与钻石连边,权值为钻石的价值
  • 汇点与保安连边,权值为小费
  • 监控关系连边,权值无穷大

代码

#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int MXN = 205;
int n, m, g[MXN][MXN], pre[MXN], flow[MXN];
bool bfs(int s, int t, int v){ // 搜索增广路memset(pre, -1, sizeof pre), memset(flow, inf, sizeof flow);queue<int> q;  q.push(s), pre[s] = 0, flow[s] = inf; // pre:路径兼标记while(!q.empty()){int last = q.front();if(last == t) break;for(int i = 1; i <= v; ++i)if(pre[i] == -1 && g[last][i] > 0)pre[i] = last, flow[i] = min(flow[last], g[last][i]), q.push(i);q.pop();}return pre[t] != -1;
}
void update(int s, int t){ // 更新残留网络for(int fa, now = t; now != s; now = fa)fa = pre[now], g[fa][now] -= flow[t], g[now][fa] += flow[t];
}
int main(){int t, x, sum, maxflow;char str[MXN];scanf("%d", &t);while(t--){memset(g, 0, sizeof g), sum = 0, maxflow = 0;scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++i) scanf("%d", &x), sum += x, g[n+m+1][i] = x;for(int i = 1; i <= m; ++i) scanf("%d", &x), g[n+i][n+m+2] = x;for(int i = 1; i <= n; ++i){scanf("%s", str+1);for(int j = 1; j <= m; ++j) if(str[j] == '1') g[i][n+j] = inf;}while(bfs(n+m+1, n+m+2, n+m+2)) maxflow += flow[n+m+2], update(n+m+1, n+m+2);printf("%d\n", sum - maxflow);}return 0;
}

偷钻石(最小割 2 最大流)相关推荐

  1. [AHOI2009]最小割(最大流+tarjan)

    继续填坑了,啦啦啦 这道题本来是准备枚举每个边,暂时去除它,但发现时间会爆炸的 于是决定另辟蹊径 于是这篇题解就应运而生 首先还是网络流跑一边 毕竟题目叫最小割嘛,给个面子 然后跑一边tarjan对满 ...

  2. 最小割与最大流(mincut amp; maxflow)

    这里先介绍mincut和maxflow,为介绍Grabcut打下基础.Grabcut可以用在图像分割和文字二值化中. 1首先介绍Mincut问题. 这部分内容主要翻译自[1],可以看原版理解的更深.由 ...

  3. 最小割与最大流(mincut maxflow)

    这里先介绍mincut和maxflow,为介绍Grabcut打下基础.Grabcut可以用在图像分割和文字二值化中. 1 首先介绍Mincut问题. 这部分内容主要翻译自[1],可以看原版理解的更深. ...

  4. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  5. noi 2006 最大收益 最大权闭合图转最小割转最大流

    题意:一个公司有n个可以建造通讯战的地方,建造成本分别为pi,然后第i个公司会选择使用通讯站ai与bi,使用费用是ci,然后问这个通讯公司怎么建站能够获利最大.(净获利=总收益-总成本): 网上看到一 ...

  6. 如何快速理解最大流和最小割

    摘要: 割从哪来-------->最大流和最小割之间的等价关系的阐述. 1.问题引入 1.1思考这样一个问题:在给定的图中,如何判断一个源点s到终点t是否有路径存在呢? 我们首先想到的是用BFS ...

  7. 最大流为什么会等于最小割

    定义:有向带权图G,源s,目的t. 非常简单的证明过程(A->D): A:可行流      1. s->t的一条通路,即是一条可行流. 2.一条可行流中,一定可以通过去掉一些边后,使该条流 ...

  8. 【图割】最大流/最小割算法详解(Yuri Boykov and Vladimir Kolmogorov,2004 )

    本博客主要翻译了Yuri Boykov and Vladimir Kolmogorov在2004年发表的改进最大流最小割算法用于计算机视觉的论文:An Experimental Comparison ...

  9. Cops and Robbers(最大流 最小割)

    https://vjudge.net/problem/Kattis-copsandrobbers 题意: 将某些位置堵上,不能使得B出去,不同字母不同花费,求最小花费. 解析: 使B与外面分离,就是最 ...

最新文章

  1. mysql数据库查询缓存_MySQL查询缓存与数据库管理
  2. 讯飞智慧餐厅(全国赛区)比赛通知
  3. 'MomentumSGD' 'zero_grads'
  4. 【商务智能】商务智能 ( 概念 | 组成 | 过程 )
  5. 又一次的Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat)
  6. Android 生成随机数,获取一条随机字符串
  7. (44)常用终端命令总结
  8. 大结局:GitHub正式归于微软旗下,新CEO下周一上任“三把火”
  9. 学会使用Trace和Debug
  10. 语言包切换 中英文系统切换 vue实现中英文切换
  11. 软件测试行业前景,人才稀缺
  12. BrcmPatchRAM 黑苹果WiFi无线网卡蓝牙驱动
  13. 【正点原子STM32连载】第七章 认识HAL库 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  14. 干货收藏|如何用chrom插件实现U校园自动刷课
  15. 静态网站和动态网站的区别
  16. echarts添加背景图
  17. 政府大数据的资源库建设
  18. 【LocalDate】获取两个日期间相差的年数、月数、天数
  19. ESimCSE:无监督句子表示对比学习的增强样本构建方法
  20. 单片机定时报警C语言程序,求一个51单片机定时闹钟程序。要C语言。能够调时间...

热门文章

  1. word文件中怎样编写目录
  2. html引入第三方语音合成,HTML5语音合成功能的实现
  3. 硬盘7200mysql_新服务器中7200转硬盘的IO是瓶颈
  4. 程序员必备:炫酷樱桃轴机械键盘,免费包邮送到家!
  5. 赋码系统服务器数据库的用途,人工智能赋码方法及系统
  6. 在线预览Office文件【效果类似百度文库】(转载)
  7. 远程控制软件的使用方法
  8. Visual C++网络编程经典案例详解 第9章 实用播放器 多线程通信 线程间通信 根据播放列表音乐序号判断mp3播放顺序
  9. day8--by a gentlement man
  10. busyBox date 在Motorola E680I 中的格式化输出