#include #include using namespace std; using namespace atcoder; constexpr long long INF = 1001001001001001001LL; /////////////////// メイン /////////////////// int main () { //////////////////// 入力 //////////////////// int n, m, k; cin >> n >> m >> k; vector a(n); for (int i=0; i> a.at(i); } vector b(m); for (int i=0; i> b.at(i); b.at(i)--; } //////////////// 出力変数定義 //////////////// vector result(m); //////////////////// 処理 //////////////////// // 最小費用流のフローネットワーク // j日目のi軒目は、基本的にj*n+i番、隣の家へ逃がす分がそれ+m*n // 2*m*nがソース、2*m*n+1がシンク mcf_graph g(2*m*n+2); // 初日に持っている分の辺を張る for (int i=0; i p = g.flow(2*m*n,2*m*n+1); // 全ての辺の状況を取得し、各日にどのくらいロスしたかを調査 vector::edge> es = g.edges(); vector lost(m,0); for (auto e : es) { if (e.cost==0) continue; lost.at(m-e.cost) = e.flow; } // 答えを順に求める long long sum = accumulate(a.begin(),a.end(),0LL); for (int i=0; i