제출 #1256367

#제출 시각아이디문제언어결과실행 시간메모리
1256367yerazhCommuter Pass (JOI18_commuter_pass)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>

#define len(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define ll long long
#define pii pair<int, int>
#define mp make_pair
#define ff first
#define ss second
#define pb push_back
#define int ll

using namespace std;

const int maxn = 1e5 + 5, inf = 2e9;

int n, m, s, t, u, v;
vector<pii> g[maxn];
bool is_min[maxn]{};

void mark_mins() {
    vector<int> dist(n, inf);
    bool used[n]{};
    
    priority_queue<pii, vector<pii>, greater<pii>> pq;
    pq.push(mp(0, s));

    while (len(pq) > 0) {
        auto [curr_dst, curr] = pq.top(); pq.pop();
        if (dist[curr] != inf) {
            continue;
        }
        dist[curr] = curr_dst;
        if (curr == t) {
            break;
        }
        for (auto [to, cst] : g[curr]) {
            if (dist[to] == inf) {
                pq.push(mp(curr_dst + cst, to));
            }
        }
    }
    
    queue<int> q;
    q.push(t);
    while (len(q) > 0) {
        int curr = q.front(); q.pop();
        is_min[curr] = 1;
        for (auto [to, cst] : g[curr]) {
            if (dist[to] == dist[curr] - cst) {
                q.push(to);
            }
        }
    }
}

void solve2() {
    mark_mins();

    bool used[n]{};
    priority_queue<pii, vector<pii>, greater<pii>> pq;
    pq.push(mp(0, v));
    while (len(pq) > 0) {
        auto [dist, curr] = pq.top(); pq.pop();
        if (used[curr]) {
            continue;
        }
        used[curr] = 1;
        if (is_min[curr]) {
            cout << dist << "\n";
            return;
        }
        
        for (auto [to, cst] : g[curr]) {
            if (!used[to]) {
                pq.push(mp(dist + cst, to));   
            }
        }
    }
    throw 1;
}

void solve() {
    cin >> n >> m >> s >> t >> u >> v;
    --s; --t; --u; --v;
    for (int i = 0; i < m; i++) {
        int from, to, cst;
        cin >> from >> to >> cst; --from; --to;
        g[from].pb(mp(to, cst));
        g[to].pb(mp(from, cst));
    }
    
    if (s == u) {
        solve2();
    }
}

int main()
{
  cin.tie(nullptr)->sync_with_stdio(false);
 
  int t = 1;
//   cin >> t;
  while (t--)
    solve();
}

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

cc1plus: error: '::main' must return 'int'