问题描述 LG2045 题解 费用流。 套路拆点,把 \((i,j)\) 拆为两个点,在这两个点之间连边:一条边流量为 \(1\) ,费用为 \(a_{i,j}\) ,另一条边为流量为 \(INF\) ,费用为 \(0\) (表示联通)。 然后在 \((i,j)\) 的出点向 \((i+1,j)\) , \((i,j+1)\) 连边,流量 \(INF\) ,费用 \(0\) ,表示联通。 建立 \(S,T\) ,分别于 \((1,1),(n,n)\) 相连,流量为 \(k\) ,费用为 \(0\) ,代表可以走 \(k\) 次。 跑费用最大流即可。 \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &x){ x=0;char ch=1;int fh; while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar(); if(ch=='-') ch=getchar(),fh=-1; else fh=1; while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); x*=fh; } const int maxn=53; const int maxm