Submission #684429

#TimeUsernameProblemLanguageResultExecution timeMemory
684429overwatch9Commuter Pass (JOI18_commuter_pass)C++17
24 / 100
68 ms3164 KiB
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
const int MAX_N = 300 + 1;
vector <pair <int, int>> adj[MAX_N];
ll dis[MAX_N][MAX_N];
int N, M, S, T, U, V;
int main() {
    cin >> N >> M >> S >> T >> U >> V;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            if (i == j)
                dis[i][i] = 0;
            else
                dis[i][j] = 1e15;
        }
    }
    for (int i = 0; i < M; i++) {
        int a, b, w;
        cin >> a >> b >> w;
        adj[a].push_back({b, w});
        adj[b].push_back({a, w});
        dis[a][b] = dis[b][a] = min(dis[a][b], (ll)w);
    }
    // for (int i = 1; i <= N; i++) {
    //     for (int j = 1; j <= N; j++) {
    //         cout << dis[i][j] << ' ';
    //     }
    //     cout << '\n';
    // }
    // cout << '\n';

    for (int k = 1; k <= N; k++) {
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= N; j++)
                dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
        }
    }
    
    // for (int i = 1; i <= N; i++) {
    //     for (int j = 1; j <= N; j++) {
    //         cout << dis[i][j] << ' ';
    //     }
    //     cout << '\n';
    // }
    // cout << '\n';
    ll ans = dis[U][V];
    ans = min(ans, dis[U][S] + dis[T][V]);
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            if (dis[S][i] + dis[i][j] + dis[j][T] == dis[S][T]) {
                ans = min(ans, dis[U][i] + dis[j][V]);
                ans = min(ans, dis[U][j] + dis[V][i]);
            }
        }
    }

    // for (int i = 1; i <= N; i++) {
    //     for (int j = 1; j <= N; j++) {
    //         cout << dis[i][j] << ' ';
    //     }
    //     cout << '\n';
    // }
    // cout << '\n';

    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...