Submission #834406

#TimeUsernameProblemLanguageResultExecution timeMemory
834406vjudge1Commuter Pass (JOI18_commuter_pass)C++17
15 / 100
291 ms23252 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pi pair<long long, int>

const int maxn = 1e5 + 1;

int n, m, S, T, U, V, u, v, w;
vector<pi> adj[maxn];
long long d[4][maxn], miU[maxn], miV[maxn], res;
priority_queue< pi, vector<pi>, greater<pi> > pq;
bool vs[maxn];

void dijktra (int p, int pr) {
    d[p][pr] = 0;
    pq.push({0, pr});

    while (!pq.empty()) {

        long long tmp = pq.top().first;
        u = pq.top().second;
        pq.pop();

        if (tmp > d[p][u]) continue;

        for (pi x : adj[u]) {
            tie(w, v) = x;

            if (d[p][v] > d[p][u] + w)
                d[p][v] = d[p][u] + w,
                pq.push({d[p][v], v});

        }
    }
}

void dfs (int u) {
    vs[u] = 1;
    if (u == T) {
        res = min(res, miU[u] + miV[u]);
        return ;
    }
    for (auto x : adj[u]) {
        tie(w, v) = x;
        if (d[0][u] + w + d[1][v] == d[0][T] && vs[v] == 0) {
            miU[v] = min(miU[u], d[2][v]);
            miV[v] = min(miV[u], d[3][v]);
            dfs(v);
        }
    }
    miU[u] = miV[u] = 1e18;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> m >> S >> T >> U >> V;
    for (int i = 1; i <= m; ++ i) {
        cin >> u >> v >> w;
        adj[u].push_back({w, v});
        adj[v].push_back({w, u});
    }

    for (int i = 1; i <= n; ++ i)
        for (int j = 0; j < 4; ++ j)
            d[j][i] = 1e17;

    dijktra(0, S);
    dijktra(1, T);
    dijktra(2, U);
    dijktra(3, V);

    res = d[2][V];
    memset(miU, 0x3f, sizeof miU);
    memset(miV, 0x3f, sizeof miV);
    miU[S] = d[2][S];
    miV[S] = d[3][S];
    dfs(S);
    cout << res;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...