【题一】zoj 2532
题意:一个图有N个城市,M个中继站,和L条线路连接。
城市发送信息,最终发送到总部(标号为0),问增大哪些线路带宽能够增加总部接收到的带宽。(考虑一条边的时候,增大这条边,别的不能变化)。
思路:
暴力枚举显然不行的,考虑最大流算法,是不停地找增广路。
那么如果一条边u->v,如果从源点开始不停找增广路,能够找到点u。
从汇点开始反向找增广路,能够找到点v,且u->v满流,那么只要增加这条边的容量,就可以增加最大流,符合题目中的条件。
(1)超级源点SS,连边到每个城市,容量为正无穷。
(2)把原图中给出的边在图中连接起来,容量即给出的对应值。
(3)把0号设为汇点,然后求最大流。
再分别就源点和汇点dfs找出源点增广路能够到达的点from[u] = 1,和汇点增广路能够到达的点to[v] = 1。注意反向找边的时候,判断满流的条件是判断其对应的正向边是否满流。
检查残量网络中的边,设为u->v,如果这条边满流,且from[u]=1,to[v]=1,则这条边满足条件。
【题二】zoj 3315
题意:给一个地图,机器人要从左上角走到右下角,机器人重复一定的指令序列,指令只包含向下走和向右走两种,问指令序列的最短长度。
枚举指令序列中向下和向右的个数,然后地图重叠过去。判断能否走到最后的终点,再由终点走到右下角。
题解:暴力搜索+剪枝
按照顺序枚举,先尝试指令序列短的,找到一个可行解就直接输出答案。
题意:求交配后代 的最大值,注意每只鱼最多攻击别的一次和被攻击一次
题解:可能交配的鱼之间连边,
方法一:最大权匹配,KM算法
方法二:网络流
【题四】hdu 3046
题意:
一个图,求出至少要多少个围墙才能把狼阻挡在羊群活动的范围外,
题解:
复习一下最小割,其实最小割可以转化为最大流,把每条边从中间切断(作中垂线),然后得到的图求最大流就行了方法就是以狼为源点,羊会汇点,求最小割即为最少的围墙数。
除了源点和汇点外其余两个网格之间的权值都是1,表示有一头狼能够通过网格走到羊群中去。
【题五】hdu 3468
题意:
甲乙两人一块寻宝,地图上有金币,图中有字母'A', 'B' ... 'Z', 'a', 'b' ... 'z',表示他们每次的会合地点,开始位置在A,乙每次以最短的距离有一个会合地点走向下一个会合地点,甲也必须走最短路,但是他可以选择走有金币的路,不过每一次的会合过程,他只能带走一块金币。问:走到最后的会合地点,甲最多能获得多少金币。
题解:
首先bfs找到每次会合有可能取的金币的位置,每个位置标号设为p1,每次会合的出发点设为p2,源点S,汇点T
可以建如下三类边:<u, v, w>分别表示一条边的起点,终点,边权
1. <S, p2, 1> 表示每一次出发最多拿到1枚金币
2. <p2, p1, 1> 表示每次出发可以拿到最短路径上的任意一个金币
3. <p1, T, 1> 表示从每个有金币的位置最多拿走一枚金币
如此建图,就能够保证流量最大时,甲拿到的金币最多,当然,符合规则。
注意:如何bfs求得最短路经过的所有点。其实也比较简单,直接bfs,bfs过程中给每个位置赋值最短距离,搜到目标位置,跳出,然后反向dfs,按照距离差值为1递减的顺序,所搜到的所有点,都是最短路径上的点。
【题六】hdu 3917
题意:
给出n,个工程,m个公司,给出每个公司施工需要上交的税务 tax,给出k 个 工程之间的关系,以及政府补助c,项目可处理对象 d。并且要求如果 选取i 公司担任这个工程,那么i 公司负责的项目也相应必须有它负责!!同时,与其” 相连 “的公司j 也必须担任” 相连“的任务!!!问政府可以获得的最高利润?!
题解:
较难,最大权闭包。
最大利润=获得最大利益-支付最少补助
获得最大利益=雇佣公司税务之和
支付最少补助=雇佣的公司的补助
最大利润=所有公司税务之和-(未雇佣公司税务之和+支付最少补助)
很显然,后面的为割,而为使利润最大割应最小:ans=sum-max_flow!!
首先 让 起始点 s 与各个 i 公司建边 边权为 tax[i],然后再让 各个公司i 与 sink 建边 ,权值为 担任的任务补助之和;并且 如果公司 i 和 j 存在“相连”关系的也建立边的关系,权值为inf;
【题七】poj 2771
题意:
两者如果满足4个条件的任意一条就不会成为夫妻,给定一些人,问从中最多能选多少人且保证任意两人不可能成为夫妻。
题解:
首先,根据性别把人划分为两个集合,每个人是一个结点构成二分图,若两个人可能成为夫妻则连一条边。同性之间不能成为夫妻,所以同集合内无边,此图必定为二分图。题目要求是选出最多的人,且任意两人之间无边。这就是求二分图的最大独立集。只要用总人数-最大匹配数即可。