比较特别的网络流题目。
就是无脑乱搞,相信自己就过了!
这个题上手就感觉太神必了,根本感觉不是网络流。该用网络流你不用,不用的你一个劲想。
因为众所周知题面告诉你一个算法的那这个题肯定不用这个算法(雾)。
为啥要说这个,因为这个题上手一看:每条边有容量,有流量,求最大流量,这不是网络流吗?
但是其实感觉很难做,因为要求的流量限制太多,很难直接做。于是我们需要转换思路了。
这个题也没啥建模,直接讲吧。
就是说,我们考虑到对于一个要求的重量的限制只是边上的限制 \(c_i\) 。如果我们知道货物的统一重量 \(d\) ,那么我们就只需要考虑一条边上经过的熊的个数上限 \(\displaystyle\lfloor \frac{c_i}{d}\rfloor\) 。这样有显然的好处:
- 我们可以把运算转换成
int
类型的。
- 这样方便判断每只熊是否能到达。
这样就可以直接判了,因为把每只熊看作 \(1\) 的流量,那么每只熊 \(1\rightarrow n\) 一路走下去如果不溢出必然有 \(x\) 的流量。所以只需要判断能否有 \(x\) 流量到达汇点 \(n\) 就这个 \(d\) 满足条件。
那么 \(d\) 怎么确定呢,都说到这份上了,还不想想二分答案?
上面那个显然是 check(mid)
的思路,所以直接做二分答案,上界 r
最多也就 \(1e6\) 。
一看 \(n\leq 50\) ,显然可以过。
最后的答案是总重量,所以是 \(x\times ans\) 。
实现判断直接用 \(\texttt{Dinic}\) 跑最大流就可以了,超过 \(x\) 即是合法的。
#include
#include
#include
#include
#include
#include
#include