PKU 2391[floyd+二分枚举+[最大流]【sap模板】]

http://acm.pku.edu.cn/JudgeOnline/problem?id=2391 

题意:一个农场有F块土地,每块土地上有cow[i]头牛,有的土地上有一个能够给牛避雨的草棚,这个草棚能容纳的牛是col[i]头,然后这F块地有P条双向路径相连每条路径每次可走无限都牛,每条路径有一个以个长度。。求,若下雨的时候所有的牛能够躲在草棚下的最短距离是多少,若不能满足条件,则输出-1;

2分+最大流。

cow[]记录每个点初始有多少人,col[]记录每个点能容纳多少人

接受路径之后用floyd求出最短路,然后根据最短路的最长值(因为奶牛转移是并行操作,只跟路径最长有关

系)2分。对每个2分的路径长度cost,拆点构图:

每个点ai拆成ai1,ai2

总源点向每个点ai1连一条容量为cow[i]的边,每个点ai2向总汇点引一条容量为col[i]的边。

对求出的floyd中,将所有长度小于cost的点引入新构的图中。

 

但是如此用普通的FF最大流算法还是会TLE的,这里我用的是sap,一般的题卡Dinic也不会卡sap;

优化1:离散化最短路,将求出的Floyd的路径分离出来,排序,设总路径条数为rn则只要通过log(rn)次枚举。

代码:

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值