제출 #1342801

#제출 시각아이디문제언어결과실행 시간메모리
1342801tamir1Commuter Pass (JOI18_commuter_pass)C++17
16 / 100
145 ms17752 KiB
#include <bits/stdc++.h>
using namespace std;


#define int long long
#define ff first 
#define ss second
#define sz(a) (int)(a).size()
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
#define pb push_back



vector<vector<pair<int, int>>> adj;



void solve() {
    
    int n, m;
    cin >> n >> m;
    int s, t;
    int u, v;
    adj.assign(n + 1, {});
    cin >> s >> t >> u >> v;
    for(int i = 1; i <= m; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        adj[a].pb({b, c});
        adj[b].pb({a, c});
    }
    vector<int> dis(n + 1, -1);
    vector<int> dis2(n + 1, -1);
    vector<int> can(n + 1);

    priority_queue<pair<int, int>> q;
    queue<int> p;

    q.push({0, s});
    while(!q.empty()) {
        int u = q.top().ss;
        int t = q.top().ff;
        q.pop();
        if(dis[u] != -1) continue;
        dis[u] = -t;
        for(auto &[a, b] : adj[u]) {
            if(dis[a] == -1) q.push({t - b, a});
        }
    }

    q.push({0, v});
    while(!q.empty()) {
        int u = q.top().ss;
        int t = q.top().ff;
        q.pop();
        if(dis2[u] != -1) continue;
        dis2[u] = -t;
        for(auto &[a, b] : adj[u]) {
            if(dis2[a] == -1) q.push({t - b, a});
        }
    }

    can[t] = 1;
    p.push(t);
    while(!p.empty()) {
        int u = p.front();p.pop();
        for(auto &[a, b] : adj[u]) {
            if(!can[a] && dis[a] + b == dis[u]) {
                can[a] = 1;
                p.push(a);
            }
        }
    }
    int ans = LLONG_MAX;
    for(int i = 1; i <= n; i++) {
        if(can[i]) ans = min(ans, dis2[i]);
    }
    cout << ans << "\n";
}   


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


    int t = 1;
    // cin >> t;
    while(t--) solve();
    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...