ABC 208

https://atcoder.jp/contests/abc208

A. Rolling Dice

https://atcoder.jp/contests/abc208/tasks/abc208_a

B. Factorial Yen Coin

https://atcoder.jp/contests/abc208/tasks/abc208_b

C. Fair Candy Distribution

https://atcoder.jp/contests/abc208/tasks/abc208_c

D. Shortest Path Queries 2

https://atcoder.jp/contests/abc208/tasks/abc208_d

ワーシャルフロイドの一番外側の loop が経由地を増やしていることと同義なので、$(A, B)$ 間の距離を更新しつつ、距離が $\infty$ でなければ加算していくことを繰り返せばよい。

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;
    vector dist(N, vll(N, INF));
    rep(i, M) {
        ll u, v, c;
        cin >> u >> v >> c;
        u--, v--;
        dist[u][v] = c;
    }
    rep(i, N) dist[i][i] = 0;

    ll ans = 0;
    rep(k, N) {
        rep(i, N) {
            rep(j, N) {
                if (dist[i][k] + dist[k][j] < dist[i][j]) {
                    dist[i][j] = dist[i][k] + dist[k][j];
                }
                if (dist[i][j] != INF) {
                    ans += dist[i][j];
                }
            }
        }
    }
    cout << ans << endl;
}

E. Digit Products

https://atcoder.jp/contests/abc208/tasks/abc208_e

F. Cumulative Sum

https://atcoder.jp/contests/abc208/tasks/abc208_f