Ejemplo n.º 1
0
    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));
    }
Ejemplo n.º 2
0
    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);
    }