快乐的一天从AC开始 | 20210704 | P2045
看到数据范围之后就猜是网络流之类的做法,仔细研究了下确实直接费用流就可以做。
首先,这题要求得是最大代价,相当于把代价取相反数的最小代价,之后再取一次相反数。
然后,搞超级源点和超级汇点,分别和\(a_{11}\)和\(a_{nn}\)连边,容量为\(k\),代价为0,表示可以走\(k\)次。
再来是拆点,对于每一个格子,将其拆分成入点和出点两个点,再这两个点之间加两条边:
- 一条边容量为1,代价为\(-a_{ij}\),表示第一次经过这个格子的收益。
- 一条边容量为INF,代价为0,表示后续可以无限经过,但是没有收益。
最后,每个格子向右和向下连边,容量为INF,代价为0,表示可以无限次转移,但是没有收益。