图论新结

             无向图最大流(最小割):   只需要加边的时候AddEdge(u, v, w, rw);w正向边cap,rw是反向边cap就可以了。

             最小割(最小的割边数):

                      方法一:把割边上界设为1,非割边流量设为边数+1(也可以INF,但注意INF相加溢出),然后再跑一边最小割就是最小割边数。(有bug??)

                      方法二:原边上界设为c*m+1(m为边数),跑一边最大流,则maxflow / m 即为割大小,maxflow%m即为最小的割边数


            最小K路径覆盖的模型(有向无环图):

               方法一:用费用流或者KM算法解决,构造二部图,X部有N个节点,源点向X部每个节点连一条边,流量1,费用0,Y部有N个节点,每个节点向汇点连一条边,流
量1,费用0,如果X部的节点x可以在一步之内到达Y部的节点y,那么就连边x->y,(如果需要费用,则表示的是边费用),流量1,再在X部增加一个新的节点,表示可以从
任意节点出发K次,源点向其连边,费用0,流量K,这个点向Y部每个点连边,费用0,流量1,最这个图跑最小费用最大流,如果满流就是存在解,反之不存在,最小费用的相反数就是可以获得的最大能量。

               方法二:费用流的不同建图方法。把每个点u拆点为u,u‘,源点s到任意点u连一条流量为1,费用为0的边,任意点u'到汇点t连一条流量为1费用为0的边。然后u到u'点连一条流量为1(表示点只被使用一次),费用为MOD(大于可能求得的最大费用),然后对于所有边(u, v),连点u到点v'的边,流量为1,费用为边的费用。最后建立超级源点ss,连一条ss到s的边,流量为k,费用为0(表示可以有k条路),最后跑一边最大费用最大流,设最后费用为cost。那么cost/MOD == N说明可以找到有向无环图的k路径,cost%MOD就是最终答案获得费用最大值(只有当最优费用大于等于0时可用!!!)。

               例题:hdu 4862 Jump

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值