Submission #1133472

#TimeUsernameProblemLanguageResultExecution timeMemory
1133472vladiliusCommuter Pass (JOI18_commuter_pass)C++20
24 / 100
2096 ms71584 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pli = pair<ll, int>;
#define pb push_back
#define ff first
#define ss second
const ll inf = 1e18;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, m, s, t, u, v; cin>>n>>m>>s>>t>>u>>v;
    vector<pii> g[n + 1];
    while (m--){
        int x, y, w; cin>>x>>y>>w;
        g[x].pb({y, w});
        g[y].pb({x, w});
    }
    
    auto f = [&](int x){
        vector<ll> out(n + 1, inf);
        priority_queue<pli, vector<pli>, greater<pli>> pq;
        out[x] = 0; pq.push({0, x});
        while (!pq.empty()){
            auto [d, y] = pq.top(); pq.pop();
            for (auto [i, w]: g[y]){
                ll dd = d + w;
                if (dd < out[i]){
                    out[i] = dd;
                    pq.push({out[i], i});
                }
            }
        }
        return out;
    };
    
    vector<ll> d[n + 1];
    for (int i = 1; i <= n; i++){
        d[i] = f(i);
    }
    
    ll out = d[u][v];
    for (int x = 1; x <= n; x++){
        for (int y = 1; y <= n; y++){
            if (d[s][t] == (d[s][x] + d[x][y] + d[y][t])){
                out = min(out, d[u][x] + d[y][v]);
                out = min(out, d[v][x] + d[y][u]);
            }
        }
    }
    cout<<out<<"\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...