摘要: 这道题应该都能想到朴素的有n*m+个点的建图方案吧,呵呵,显然是不行的。那么怎么办?其实我们可以这样想:一个人能买到的猪有两个来源:①来自自己第一次打开的猪圈②来自之前别人打开的猪圈想到了这个实质,见图就简单了!我们设一个超级源点S,和超级汇点T,对于每一个人,从S向他连一条容量为K的边(K是由这个人第一次打开的猪圈的初始猪的个数之和),然后对于一个人A,他打开了P猪圈,且P猪圈之前被B打开过,则从B向A连一条容量为INF的边,最后,对于每一个人,都向T连一条容量为lim[i](表示每个人的购买猪的上限)的边,跑在最大流就行!代码:View Code 1 #include <cstdio 阅读全文
posted @ 2012-08-27 22:43 proverbs 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 昨天刚学网络流,于是拿这道题练手。这道题最关键的就是建边,首先,对于这个题,限制流量是重点,我这里就提供限制流量的方法:拆点!(我作图水平极差,大家凑合着看吧!)我们把每个格子拆成两个点,这连个点之间连一条容量为1,权值为map[i][j]的边再连一条容量为INF,权值为0的边这样就限制了流量,也就是取这个格子最多只能取一次,至于以后再经过这个格子,只能通过第二条容量为INF的边,这样就取不到这个格子的数了为了叙述方便我们设每个格子的第一个点为1,第二个点为2对于一个格子的2号点,连边如上图。从2号点连出来的边意味着通过这个格子以后可以向下边的格子和左边的格子走最后对于左上角和右下角的点分别和 阅读全文
posted @ 2012-08-27 21:18 proverbs 阅读(797) 评论(0) 推荐(0) 编辑