제출 #407571

#제출 시각아이디문제언어결과실행 시간메모리
407571LittleFlowers__Commuter Pass (JOI18_commuter_pass)C++17
100 / 100
610 ms19532 KiB
/*input
6 6
1 6
1 4
1 2 1
2 3 1
3 5 1
2 4 3
4 5 2
5 6 1
*/
#include <bits/stdc++.h>
using namespace std;

int n, m, s, t, u, v;
vector<pair<int, int>> ad[100010];

void dij(int fw, vector<long long>&f) {
    fill(f.begin(), f.end(), 1e15);
    priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q;
    q.push({0, fw}); f[fw] = 0;
    while (q.size()) {
        long long w; int u; tie(w, u) = q.top(); q.pop();
        for (auto v : ad[u]) {
            if (f[v.first] > w + v.second) {
                f[v.first] = w + v.second;
                q.push({w + v.second, v.first});
            }
        }
    }
}

main() {
    cin  >> n >> m >> s >> t >> u >> v;

    for (int i = 0; i < m; ++i) {
        int x, y, w; cin >> x >> y >> w;
        ad[x].push_back({y, w});
        ad[y].push_back({x, w});
    }

    vector<long long> fs(n + 1), ft(n + 1), fu(n + 1), fv(n + 1);

    dij(t, ft);
    dij(u, fu);
    dij(v, fv);
    dij(s, fs);


    long long ret = fu[v];
    for (int i = 0; i < 2; ++i) {
        vector<long long> f(n + 1, 1e15), pf(n + 1, 1e15);
        priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q; q.push({0, s}); f[s] = 0; pf[s] = fu[s];
        while (q.size()) {
            long long w; int  u; tie(w, u) = q.top(); q.pop();
            ret = min(ret, pf[u] + fv[u]);
            for (auto v : ad[u]) {
                if (fs[v.first] + ft[v.first] == fs[t]) {
                    pf[v.first] = min({pf[v.first], fu[v.first], pf[u]});
                    if (f[v.first] > w + v.second) {
                        f[v.first] = w + v.second;
                        q.push({w + v.second, v.first});
                    }
                }
            }
        }
        swap(fu, fv);
    }
    cout << ret;
}

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp:33:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   33 | main() {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...