题目链接:http://poj.org/problem?id=2391
这题一开始想成了费用流,不过应该有些细节没考虑到,一直WA。
这题的做法是二分网络流,先用Floyd预处理出任意两个结点的距离,二分这个距离,在跑最大流时只走小于这个距离的边,找到最大流能等于奶牛数的最小距离即可。
有个细节需要注意,结点是需要拆成入点和出点的,超级源向入点连边,出点向超级汇点连边,出点向入点连距离为最小距离容量为INF的边,这样能防止一些比较奇怪的问题,比如最小距离叠加到新的最小距离上了。
1 |
|
题目链接:http://poj.org/problem?id=2391
这题一开始想成了费用流,不过应该有些细节没考虑到,一直WA。
这题的做法是二分网络流,先用Floyd预处理出任意两个结点的距离,二分这个距离,在跑最大流时只走小于这个距离的边,找到最大流能等于奶牛数的最小距离即可。
有个细节需要注意,结点是需要拆成入点和出点的,超级源向入点连边,出点向超级汇点连边,出点向入点连距离为最小距离容量为INF的边,这样能防止一些比较奇怪的问题,比如最小距离叠加到新的最小距离上了。
1 | #include <cstdio> |