static void Main() { var(n, m) = Read2(); var a = Read(); var b = Read(); var r = Read(); var sv = n + 3; var ev = sv + 1; var mf = new MinCostFlow(ev + 1); for (int i = 0; i < 3; i++) { mf.AddEdge(sv, n + i, m, 0); } for (int j = 0; j < n; j++) { long p = a[j]; for (int i = 0; i < 3; i++) { mf.AddEdge(n + i, j, 1, -(p *= b[j]) % r[i]); } mf.AddEdge(j, ev, 1, p = a[j] * b[j]); mf.AddEdge(j, ev, 1, p *= b[j] - 1); mf.AddEdge(j, ev, 1, p *= b[j]); } Console.WriteLine(-mf.GetMinCost(sv, ev, 3 * m)); }
static void Main() { var h = Read(); var n = h[0]; var es = Array.ConvertAll(new bool[h[1]], _ => Read()); var mf = new MinCostFlow(n); mf.AddEdges(es); var r = mf.GetMinCost(0, n - 1, h[2]); Console.WriteLine(r == long.MaxValue ? -1 : r); }