제출 #1362188

#제출 시각아이디문제언어결과실행 시간메모리
1362188gayCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
2096 ms16892 KiB
#include <bits/stdc++.h>

using namespace std;

using ld = long double;
using ll = long long;

const ll INF = 3e18, MOD = 1e9 + 7;

void solve();

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    int q = 1;
    while (q--) {
        solve();
    }
}

vector<vector<pair<ll, ll>>> g;
ll n;
ll dist(ll s, ll t) {
    vector<ll> ds(n, INF);
    ds[s] = 0;
    set<pair<ll, ll>> dj;
    dj.insert({0, s});
    while (!dj.empty()) {
        ll v = dj.begin()->second;
        dj.erase(dj.begin());
        for (auto [u, c] : g[v]) {
            if (ds[u] > ds[v] + c) {
                dj.erase({ds[u], u});
                ds[u] = ds[v] + c;
                dj.insert({ds[u], u});
            }
        }
    }
    return ds[t];
}

void solve() {
    ll m; cin >> n >> m;
    ll s, t; cin >> s >> t; s--, t--;
    ll u, v; cin >> u >> v; u--, v--;
    g.resize(n);
    for (int i = 0; i < m; i++) {
        ll a, b, c; cin >> a >> b >> c;
        a--, b--;
        g[a].emplace_back(b, c);
        g[b].emplace_back(a, c);
    }
    ll len = dist(s, t);
    ll ans = dist(u, v);
    for (int f1 = 0; f1 < n; f1++) {
        for (int f2 = 0; f2 < n; f2++) {
            if (dist(s, f1) + dist(f1, f2) + dist(f2, t) == len) {
                ans = min(dist(u, f1) + dist(f2, v), ans);
                ans = min(dist(v, f1) + dist(f2, u), ans);
            }
        }
    }
    cout << ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…