目录

  • p.s:

    • 1、飞行员配对问题
    • 2、分配问题
    • 3、试题库问题
    • 4、圆桌问题
    • 5、负载平衡问题
    • 6、软件补丁问题
    • 7、孤岛营救问题
    • 8、魔术球问题
    • 9、汽车加油行驶问题
    • 10、最小路径覆盖问题
    • 11、太空飞行计划问题
    • 12、方格取数问题
    • 24/12ing

p.s:

① 此随笔着重讲的是建模思路,可能不会贴上代码。

② 以下出现的S都代表源点,T都代表汇点。

1、飞行员配对问题

飞行员配对问题

Solution:

二分图匹配模板。可以用匈牙利算法,也可用最大流。

网络流的建模:

由S向左部图连容量为1的边,右部图向T连容量为1的边,左右部图间根据给出的条件,对应连上一条容量为1的边。

2、分配问题

分配问题

二分图带权匹配模板。可以用KM算法,也可以用费用流。

费用流的建模:

在二分图最大匹配建图的基础上,给左右部图间的连边赋上1的费用,其他边费用为0。

3、试题库问题

试题库问题

二分图多重匹配模板。

网络流的建模:

在二分图最大匹配建图的基础上,只需要把T连向左部图(左部图为题中试题类型)的边容量改为需要的试题量。

4、圆桌问题

实际上可以说应该说是多重匹配问题。

这个合适上一个题的区别就在于,上一题只有左部图可以连多条边,而此题左右部图都可以。

所以建模的话,只需在上述基础上,右部图再往T连对应容量的边即可。

5、负载平衡问题

负载平衡问题

Solution:

这个题其实费用流才是真暴力。。。数学做法只要O(nlogn)。

但是,既然是24题当然得用网络流知识做嘛。。

这个建模没那么好想:

首先,我们需要注意到,一个点它只可以与前面的点或后面的点进行交换,且要么补给别人,要么接受别人补给。

对于这种只有出入两种情况的,一般启发着往拆点二分图上靠。

那么,左部图的点向右部图的点连的边表示左部给右部补给。

然后,可以把所有的点需要或多余的给计算出来。

对于一个点,如果它有多余,那么从它对应的左节点 向 相邻的两节点的右节点 连容量为inf,费用为1的边。

然后,S连向这些节点的左节点,容量为多余的量,费用为0。

对于一个点,如果它需要别人补给,那么向T连一条容量为需要的量的边。

但是还有一个很重要的点!!

那就是,对于有多余的点,还需向相邻节点的左节点连一条连容量为inf,费用为1的边!!!

这就相当于:这个点并不直接向两侧的点供应,而是把他们当做中转站而已。。

Code↓:

#include<bits/stdc++.h>
#define RG register
#define IL inline
using namespace std;const int N=110;
const int inf=0x3f3f3f3f;queue<int> q;
int n,S,T,cost,s[N],a[N],tot=1,pre[N<<2],vis[N<<2],dis[N<<2],head[N<<2],Minf[N<<2];struct EDGE{int next,to,v,w;}e[N*N];IL void make(int a,int b,int c,int d) {e[++tot]=(EDGE){head[a],b,c,d},head[a]=tot;e[++tot]=(EDGE){head[b],a,0,-d},head[b]=tot;
}IL int spfa() {RG int i,x,y;while(!q.empty()) q.pop();memset(vis,0,sizeof(vis));memset(dis,0x3f,sizeof(dis));q.push(S),vis[S]=1,dis[S]=0,Minf[S]=inf;while(!q.empty()) {x=q.front(),vis[x]=0,q.pop();for(i=head[x];i;i=e[i].next) {if(e[i].v&&dis[y=e[i].to]>dis[x]+e[i].w) {dis[y]=dis[x]+e[i].w;pre[y]=i,Minf[y]=min(Minf[x],e[i].v);if(!vis[y]) vis[y]=1,q.push(y);}}}return dis[T]!=inf;
}IL void update() {RG int i,now=T;while(now!=S) {i=pre[now];e[i].v-=Minf[T],e[i^1].v+=Minf[T];now=e[i^1].to;}cost+=Minf[T]*dis[T];
}int main()
{RG int i,ave,sum=0;scanf("%d",&n);for(i=1;i<=n;++i) scanf("%d",&s[i]),sum+=s[i];for(i=1,ave=sum/n;i<=n;++i) s[i]-=ave;S=1,T=2*n+2;for(i=1;i<=n;++i) {if(s[i]>0) make(S,i+1,s[i],0);else make(i+n+1,T,-s[i],0);}for(i=1;i<=n;++i) {if(i!=1) make(i+1,i,inf,1),make(i+1,i+n,inf,1);if(i!=n) make(i+1,i+2,inf,1),make(i+1,i+2+n,inf,1);}make(2,n+1,inf,1),make(2,n*2+1,inf,1);make(n+1,2,inf,1),make(n+1,n+2,inf,1);while(spfa()) update();printf("%d\n",cost);return 0;
}

6、软件补丁问题

软件补丁问题

Solution:

最短路!!(雾)

一个需要注意的地方是,每个补丁可以用无限次。。。

又由于错误数很少,所以,可以直接状压一下表示当前错误状态,跑最短路即可

贴一下判断部分Code↓:

IL int judge(int x,int id) {if((x&b1[id])!=b1[id]||(x&b2[id])) return -1;x-=x&f1[id],x|=f2[id];return x;
}

7、孤岛营救问题

孤岛营救问题

Solution:

BFS!!(额额额)

思考一下如果需要知道什么?

拥有的钥匙情况!

不知道怎么办,设出来就好了。

钥匙数小于等于10,直接状压后BFS即可。

8、魔术球问题

魔术球问题

Solution:

首先需要知道一个结论:

放的球数和柱子数成正相关

所以本题可以直接贪心(>_<)

但是网络流怎么样做呢??

还是考虑我们如果知道了什么东西就好做点了。

球数和柱子数是吧。

既然不知道,不妨尝试枚举,枚举基于上结论。

考虑新进来一个球。

那么由上结论可知,只要能放,就不会加入柱子。

怎样判断一个球能不能放才是重点,网络流。

我们考虑枚举之前能够和他连边的数,连上一条容量为1的边,

如果,我们在当前残量网络上能跑出一条为1的增广路,那么就可以放,否则加柱子。

Zeny神犇:这个题可以完全转换成最小路径覆盖啊。I:呃呃。。。Zeny神犇:你太呆了,这个题就相当于是给定了路径数求最大点数啊。菜鸡在神犇面前,只适合sto orz    

9、汽车加油行驶问题

汽车加油行驶问题

Solution:

直接最短路就好了。

我写的spfa,而且是直接再网格上跑的,懒。

需要注意一下转移的时候,边权可能需要讨论一下。

10、最小路径覆盖问题

最小路径覆盖问题

Solution:

路径最少意味着什么?

终点数最少。这又意味着什么?

没有出度的点最少。这在一张左右两部分别表示点入度和出度的二分图上又意味这什么?

左部表示出度,没出度的点最少,就是左部没被匹配的点最少,那么就是:

总点数-最大匹配。

所以直接最大流。

11、太空飞行计划问题

太空飞行计划问题

Solution:

最大权闭合子图模板。

闭合子图:

给定一个有向图,从中选择一些点组成一个点集V.对于V中任意一个点,其后续节点都仍然在V中.

最大权闭合子图的话,就是给一些边权值,有正有负,求权值最大的闭合子图。

给个结论:

    最大权 闭合子图=正权之和-最小割/最大流

建模:

S向正权点连权值的边,负权点向T连权值绝对值的边,正权点负权点间建inf的边

可以发现,这个还是很好理解的:

S与正权点间的边如果满流了,那么意味着这些费用都用来填补负权了,没有收益。

否则,这个差值就代表着选这个点及其后继点的收益。

负权点与T同样可以类似分析。

思维还是很巧妙的。

12、方格取数问题

方格取数问题

Solution:

首先,需要反向认识到:取数最大总和=所有数总和-不取的数最小的和

这应该联想到最小割,那么考虑怎么建图:

我们发现一个点能够影响的有且仅有它周围四个点,那么考虑黑白染色

假设对于每一个黑点,我们向它四周的几个点连边,容量为无限.

同时S向黑点连边,容量为黑点点权

对于白点,白点向T连边,容量为白点点权

这个时候跑最小割(最大流)即可

此时我们割掉的那些边必然是非无限边,所以割一条边可以代表着:不选对应的那个格子。

24/12ing

转载于:https://www.cnblogs.com/Bhllx/p/10617855.html

网络流24题 Updating相关推荐

  1. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

  2. 「网络流24题」 12. 软件补丁问题

    「网络流24题」 12. 软件补丁问题 状压 DP,SPFA 转移. 没错,跟网络流没任何关系. b1.b2.f1.f2 都用二进制存下来,第 i 位表示是否有这个错误. 然后从每位都是 1 到 0 ...

  3. loj #6226. 「网络流 24 题」骑士共存问题

    #6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些 ...

  4. 【线性规划与网络流24题】孤岛营救问题 分层图

    孤岛营救问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 1944年,特种兵麦克接到国防部的命令.要求马上赶赴太平洋上的一个孤岛,营救被敌军 ...

  5. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

  6. 【线性规划与网络流24题】汽车加油行驶问题 分层图

    汽车加油行驶问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 给定一个 N*N的方形网格,设其左上角为起点◎,坐标为( 1,1),X轴向右为 ...

  7. 【网络流24题】魔术球问题(最大流)

    [网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...

  8. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流

    «问题描述: 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任 意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. «编程任务: 对于给定 ...

  9. [ZJOI2010]网络扩容[网络流24题]

    [ZJOI2010]网络扩容[网络流24题] 题意: 给定一张有向图,每条边都有一个容量 c 和一个扩容费用 w.这里扩容费用是指将容量扩大 1 所需的费用.求: 在不扩容的情况下,1 到 n 的最大 ...

  10. P2756 飞行员配对方案问题【网络流24题】

    P2756 飞行员配对方案问题 文章目录 题目背景 题解: 代码: 题目背景 第二次世界大战期间,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相 ...

最新文章

  1. oracle存储空间管理,Oracle存储空间管理
  2. python函数分几种_简单了解Python中的几种函数
  3. 分数化成有限小数的方法_人教版六年级数学上册6.2百分数的换算微课视频辅导|课后练习...
  4. VC++6绘制GIS地图不同类型的点
  5. splay/fhq-treap 问卷调查反馈—— [JSOI2008]火星人prefix(splay),Strange Queries(fhq-treap)
  6. 12日疯人认证百度云_12月15日上海实习汇总(百度、美图、哔哩哔哩等)
  7. SAP License:SAP CWM功能及限制
  8. 【C++】C++类和对象
  9. mysql中Group_concat,查找列名,将字符串转换为数字比较大小等杂项记录
  10. 批判性思维-真理连贯论
  11. 圆通快递单css样式
  12. linux下反汇编命令,Linux下反汇编指定的函数
  13. 个税计算器 / 微信小程序开发
  14. oracle现金流量表逻辑,【实战】编制现金流量表的一些个人理解(附下载勾稽表)...
  15. 浦发银行面试笔试经历
  16. Vue 组件之间传值
  17. 医院pacs系统服务器配置,浪潮为千佛山医院PACS系统开“药方”
  18. LeetCode算题——6月
  19. jmeter调整字体大小
  20. 莫言用 ChatGPT 写颁奖辞;微软CEO反驳马斯克:我们没有控制OpenAI;SQLite 3.42.0 发布|极客头条

热门文章

  1. matlab 图例 显示几个,matlab图例拆分成两个多个分别显示
  2. cad2016中选择全图字体怎么操作_CAD2016(精简版)安装教程
  3. python获取像素值_从PIL获取像素值列表
  4. 拼多多商品详情|多多进宝商品详情|拼多多商品详情接口
  5. 文本界面听歌神器--moc
  6. nginx实现rtmp,flv,mp4流媒体服务器
  7. Zotero使用记录----1 下载与安装
  8. 计算机复制教程,教你如何提升电脑文件复制速度的详细教程
  9. html点击图片可以放全屏,html:点击图片放大到全屏,再次点击缩回
  10. 九款实用的在线画图工具(那些可以替代Visio的应用)