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

来源:互联网 发布:淘宝店铺女装女鞋介绍 编辑:程序博客网 时间:2024/05/16 01:55

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)次枚举。

代码:

 

 

原创粉丝点击