您的位置:首页 > 理论基础 > 计算机网络

网络流建图的几点体会(给自己看的笔记,持续更新)

2016-01-31 14:01 295 查看
求大牛分享网络流题集与学习经验,dp大牛要拍砖请去隔壁动态规划笔记篇~~

网络流建图,实质是对实际问题的抽象。用一些图论中的理论去模拟实际问题,然后再把解出的答案转化为实际问题的答案。

限制通常体现在边权上,实际意义什么的可能体现在点上也可能体现在边上。

网络流适用问题一:多次方案的叠加问题,不同方案的选择互相排斥,适当建图把各方案表示在一个图里是关键。比如:

1.从某点到某点走最短路,有多少种走法(走过的边不能再走)。起点为源,终点为汇,所有可以成为最短路径一部分的边,其权置为一(因为只能被选一次,不同方案的选择互相排斥)。然后跑最大流即可。

2.给定二分图,求可构成完备匹配的不同方案数(选过的边不能再选)。见hdu3081,hdu3277。。自建源点和汇点,将二分图左右两部分,左边各点与源点相连,右边各点与汇点相连。接下来要通过限定边权来转化问题。从源点到左边各点的边权皆设为limit,从右边到汇点的各边权也设为limit。跑最大流,若最大流结果为n*limit,就说明至少可以构成limit种方案。

3.接上。技巧:若某点有多种类型的选择,那么可以通过拆点实现建模。如上hdu3277。每个女孩可以在K个不喜欢的男孩中进行选择。也就是说在这多次方案叠加最后的结果中,每个女孩所选的不喜欢的男生不能超过K个,这里考虑拆点,每个女孩拆成两个点,一个连喜欢的男生,一个连不喜欢的男生。然后限制边权,这两个点所能够获得的总流为limit,然后跑最大流即可。

网络流使用问题二:在限制条件下求最优解,将实际问题合理地转化为图论里的问题(边,点之类的)是关键,思路要活跃一些

这类问题感觉比较需要脑洞Orz,比如:

1.hdu4292:有F种食物 D种饮料 它们都有一定的数量 有N个人 每个人都有自己喜欢吃的食物和饮料 (每个人至少要一种食物和饮料) 只有能满足他的要求时他才会接服务 求最大能满足多少人。。这里自建超级源点与汇点,源点与食物相连,汇点与饮料相连,边权为其数量。每个人拆成两个点,边权为1,再分别与其喜爱的饮料与食物相连。跑最大流即可。这里将某人必须同时具有至少一个喜爱的食物与饮料转化为一条边,即实际问题转化为图论的东西。同类型的问题还有POJ3281.。。。(待补充~~)

2.关于拆点,也可用于某些限制条件的设置。hdu2732,通过对柱子拆点,边权设置为每个柱子能被跳多少次;hdu3338,将某行某列相交处某个数的大小表示为某行与某列的连边,然后行与源点相连,列与汇点相连(类比一下二分匹配里的行列匹配和奇偶匹配),跑最大流。

3.hdu3605.这其实更像个匹配问题。。n个人,m个星球。给出每个人能适应哪个星球以及每个星球能容纳多少人。求最多转移多少人。

源点与各人相连,权值皆为一,星球与汇点相连,权值为能容纳的人数。跑最大流。将把人转移到某星球上表示为人与星球的连边。

另外由于网络流比较费时。建图的时候,能优化最好优化。比如这题m比较小n比较大,那么很多人的选择事实上可以合并,最多1024组左右。。

4.hdu2883。一台烧烤机一次最多烤m块肉,n位顾客,第i位到达时间为si,离开时间为ei,点了ci块肉,每块烤时间为di,问能否满足所有人的要求。。

由于每个时间段里烤肉机都只能烤m块肉,所以把时间分段,看成点。把烤肉花的时间作为各边权。。用这样的思路建图。

5.hdu4289。给定一图,恐怖分子要从S城到D城,问警察最少封锁多少座城市就可以阻止恐怖分子。

以S为源点,D为汇点。每个城市拆点,边权为一。这就使所有经过该城的路径最多能流过的流为一,从而最大流的值就是最少要封锁的城数。

网络流建图的常见优化总结。

1.hdu3605.这其实更像个匹配问题。。n个人,m个星球。给出每个人能适应哪个星球以及每个星球能容纳多少人。求最多转移多少人。

源点与各人相连,权值皆为一,星球与汇点相连,权值为能容纳的人数。跑最大流。将把人转移到某星球上表示为人与星球的连边。

另外由于网络流比较费时。建图的时候,能优化最好优化。比如这题m比较小n比较大,那么很多人的选择事实上可以合并,最多1024组左右。。

2.hdu4280.。图好建,但据说比较卡时间。个人感觉ISAP(加gap优化)比dinic更快一些,模板很重要啊。。
3.hdu1087.有一些用电器,一些插座,好多好多适配器(和日常生活中的一样的概念)。给定他们具体的信息,问最多有多少用电器能充上电。自建源点汇点,源点与用电器类型相连,边权为一,插座类型与汇点相连,边权为一。比较头疼的就是由于适配器,不同类型也可以相互匹配,搞起来很麻烦。这时候我们可以直接在插座类型上连边,比如某适配器可以将A->B,那么就在A与B之间连一条边,边权为INF。自己考虑一下就明白了。这里就大大简化了建图操作。

几个特别的题。

1.网络流与线性规划24题之02:

太空飞行中,可以在飞船上做一些实验,每个实验都需要一些仪器。做实验会得到相应的报酬,每种仪器又要付出相应的成本。求净利润最大为多少?(做试验获得的总报酬减去配备仪器所需的总花费)。

这里实际上是求最大权闭合图问题。将源点与各实验相连,边权为报酬;各仪器与汇点相连,边权为花费。试验与仪器具有对应关系的就连边,边权为无穷大。跑最大流。最终答案就是所有试验的总报酬减去最大流的值。。具体的话这里有篇博客讲得挺详细http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html

2.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM 网络流