上一页 1 ··· 37 38 39 40 41 42 43 44 45 ··· 66 下一页
摘要: 这里参看了大牛的解题思路,学习了很多。原来上下界流的求法是这么的灵活,尤其我是用的临界表存储的边,删除更新很不方便。http://www.shuizilong.com/house/archives/sgu-176-flow-construction/http://hi.baidu.com/lxc_0601/blog/item/39e4e2ecd3be0b2f62d09f95.html这里要进行说明的求解一个有上下界的网络流的步骤:1.首先进行构图,对于那么对流量没有限制的边,我们直接将容量赋值为原始的容量,而对于有流量要求的边,我们将容量减去下界并将其等价与无下界的边。最后就是添加一个附加汇点 阅读全文
posted @ 2012-07-08 14:00 沐阳 阅读(1963) 评论(1) 推荐(0) 编辑
摘要: 有一条东西向流淌的河,宽为 W,河中有 N 块石头,每块石头的坐标(Xi, Yi)和最大承受人数 Ci 已知。现在有 M 个游客在河的南岸,他们想穿越这条河流,但是每个人每次最远只能跳 D 米,每跳一次耗时 1 秒。问他们能否全部穿越这条河流,如果能,最少需要多长时间。 <= N <= 50, 0 < M <= 50, 0 <= D <= 1000, 0 < W(0<= 1000, 0 < Xi < 1000, 0 < Yi < W, 0 <= Ci <= 1000)。刚看完这题,想当然的认为它是一道最小费用流 阅读全文
posted @ 2012-07-07 16:09 沐阳 阅读(1172) 评论(0) 推荐(0) 编辑
摘要: 题目意思是有一些蜥蜴在一个迷宫里面,求这些蜥蜴还有多少是无论如何都逃不出来的。题目只给定一个行数,一个最远能够跳跃的距离,列数是不确定的(题目告知列数小于等于20),但是数据一定会是一个矩阵。每只蜥蜴有一个初始的位置,题目保证这些位置都有一些柱子,每次蜥蜴从一个位置跳到另外一个位置的时候,就会由于反作用力使得一根柱子倒下。很显然,这一题,可以用网络流来求解,那么如何去构图呢?首先我们要确定一个贪心思想,即如果从某一根柱子能够直接跳到迷宫的外面,那么我们就将这个点连接到汇点,而不用将这个点连接到其他的点了。对于哪些不能跳出去但是又有柱子的点,那么我们就去按照跳跃距离搜寻有没有其他的柱子能够去.. 阅读全文
posted @ 2012-07-06 17:31 沐阳 阅读(934) 评论(0) 推荐(0) 编辑
摘要: 该题是给定对个任务,然后告诉你这多个任务在两个不同的核心上执行任务所花费的不同代价,并且还告诉如果其中一些任务不在同一个核心上面运行的话,还有有多余的开销。最后问我们完成所有任务的最小开销是多少? 对于这个问题,我们先把问题简单话一下,如果没有第二个约束条件,仅仅只有在两个核上的运行时间。那么可能你会说对每个时间所花费的时间取一个最小值就可以了,事实也确实如此,但是如果用流网络来建立这个模型的话,那么我们需要将这个事件拆成两个点,从源点流向左边点的容量是一个核心上花费的时间,两个事件点之间的容量为无穷大,右边点流向汇点的容量为该事件在第二个核心上面所花费的时间,由于中间的边的容量是无穷大... 阅读全文
posted @ 2012-07-06 10:47 沐阳 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 题义很简单,还记得方格取数(1)的时候,使用状态压缩写的,这里由于行列数太大,因此无法进行压缩。所以要运用的最小割最大流的思想来解这道题。 大概是这样分析的,题义是要我们求在一个方格内取出N个点,使得这N个独立的(不相邻)点集的和最大。我们可以将问题转化为最小割来求解。首先,我们将方格进行黑白相间的染色,然后再将任意一种颜色(黑色)作为源点,一种颜色(白色)作为汇点。我们的算法过程就是一个不断寻找增广路的过程。当我们找到最大流的时,也就是此时不存在从黑色到白色的路径,也即不存在不相邻的两个方格能够连通了。而此时的最大流就是分割两个区间的最小割,拿总合值减去这个最小割就是我们想要得到的结果... 阅读全文
posted @ 2012-07-06 09:24 沐阳 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 第一道网络流的应用题,题中要求出至少要多少个围墙才能把狼阻挡在羊群活动的范围外,解决该题的方法就是以狼为源点,羊会汇点,求最小割即为最少的围墙数。出源点和汇点外其余两个网格之间的权值都是1,表示有一头狼能够通过网格走到羊群中去。递归写的sap一直超时,最后还是递归的Dinic过了,无语了。不会非递归伤不起啊。代码如下:#include <cstring>#include <cstdlib>#include <cstring>#include <algorithm>#include <cstdio>#include <queue& 阅读全文
posted @ 2012-07-05 22:50 沐阳 阅读(775) 评论(0) 推荐(0) 编辑
摘要: 该题题义是这样的,有N台机器安排去组装电脑,每台电脑有P个零部件,一台可以出产的电脑必须要求每个部件都有。每台机器能够接受的本成品电脑不同,对于每个部件,输入数据给出了0(一定不能够在半成品上出现),1(一定要在上面出现),2(可以出现也可以不出现)。每台机器生产出来的半成品(或者成为了成品)的情况也有不同,对于每个部件0代表经过这个机器加工后,该号不见没有,相反,1代表有。 由于每台机器的处理能力有限,所以这里要将点拆成边,点内的边赋值为产能,其他边均赋值为无穷大。对部件没有要求的机器为源点,对部件都有要求的机器为汇点。考虑好机器与机器之间的传递关系,建图后直接计算最大流,最后在遍历两... 阅读全文
posted @ 2012-07-03 12:49 沐阳 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 题中给出了各种点的定义,其实我们只要建立两个虚拟节点就可以了。一个是源点流到所有的p点,一个是汇点,所有的c点流过去,再求最大流就可以了。当然题中的输入数据比较恶心,这里用了字符串的处理方式来解决。 代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#include <queue>#define S N#define T (N+1)#define INF 0x3fffffff#define MAXN 105using namesp 阅读全文
posted @ 2012-07-03 10:20 沐阳 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 这题和其他的要用二分图匹配不太一样,只要是它允许有重叠的点可以利用,而寻找增广路径的方式是不允许一点重复利用的。所以这题要转换一下方式来间接求得。 首先对于所有的孤立进行搜索,顺带建立边的关系,对于孤立的节点一定要安放一个雷达的。然后对于剩下的的,根据贪心思想,让一个天线直接覆盖两个点的话是最优的策略,于是我们利用二分图匹配这个方法使得所有的匹配成功的边都安装天线。接下来我们再将所有没有覆盖到的点在适当位置安放天线(势必会有重复覆盖的点)。最后将三者的值相加即可。当然第一个结果和第三个结果是可以一起算的。 代码如下:#include <cstdlib>#include <cs 阅读全文
posted @ 2012-07-02 21:58 沐阳 阅读(695) 评论(0) 推荐(0) 编辑
摘要: 该题题义为给定网格的中的点的坐标,现在要去将这些点摧毁,有一种武器能够一次摧毁一行或者是一列的所有目标,问最少用多少次该武器能够使得所有的目标消失。这题怎么转化为二分图去做呢,过程是这样的,首先对于每个目标有两种方式能够让其消失,一种是在其所在行上使用武器,一种是在其所在列上使用武器。那么对于所有的目标而言,只要在行列满足之一的地方使用武器就可以全部清除目标。于是我们可以将目标所在行列进行匹配,然后再求最小顶点覆盖就可以了。因为最小顶点覆盖就是满足一条边至少有一个顶点在这个顶点集中。代码如下:#include <cstdlib>#include <cstdio>#inc 阅读全文
posted @ 2012-07-02 16:51 沐阳 阅读(192) 评论(0) 推荐(0) 编辑
上一页 1 ··· 37 38 39 40 41 42 43 44 45 ··· 66 下一页