Exemplo n.º 1
0
    void Solve()
    {
        //input
        H = io.Int;
        W = io.Int;
        c = new int[10, 10];
        A = new int[H, W];
        for (int i = 0; i < 10; ++i)
        {
            for (int j = 0; j < 10; ++j)
            {
                c[i, j] = io.Int;
            }
        }
        for (int i = 0; i < H; ++i)
        {
            for (int j = 0; j < W; ++j)
            {
                A[i, j] = io.Int;
            }
        }
        //cal
        var wf = new WarshallFloyd(10, false);

        for (int i = 0; i < 10; ++i)
        {
            for (int j = 0; j < 10; ++j)
            {
                wf.AddPath(i, j, c[i, j]);
            }
        }
        wf.Run();
        var ans = 0L;

        for (int i = 0; i < H; ++i)
        {
            for (int j = 0; j < W; ++j)
            {
                if (A[i, j] != -1)
                {
                    ans += wf.MinCost(A[i, j], 1);
                }
            }
        }
        //ret
        WriteLine(ans);
    }
Exemplo n.º 2
0
    void Solve()
    {
        io.i(out h, out w);
        io.ini(out c, 10, 10);
        io.ini(out a, h, w);
        var wf = new WarshallFloyd(10, false);

        c.Fun((i, j) => wf.AddPath(i, j, c[i, j]));
        wf.Run();
        var score = 0L;

        a.Fun((i, j) => {
            if (a[i, j] != -1)
            {
                score += wf.MinCost(a[i, j], 1);
            }
        });
        score.Prt();
    }