Submission #1167586

#TimeUsernameProblemLanguageResultExecution timeMemory
1167586kitijakCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
347 ms11720 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
using namespace std;
    int n, m, s, t, u, v, a, b, c;
    int attv[100005], atts[100005], attu[100005], attt[100005];
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> n >> m  >> s >> t >> u >> v;
    vector<pii>graph[100005];
    for(int i=0; i<m; i++){
        cin >> a >> b >> c;
        graph[a].pb({c, b});
        graph[b].pb({c, a});
    }
    fill(attv, attv+n+1, INT_MAX);
    fill(atts, atts+n+1, INT_MAX);
    fill(attt, attt+n+1, INT_MAX);
    fill(attu, attu+n+1, INT_MAX);
    priority_queue<pii, vector<pii>, greater<pii>>pq;
    attv[v]=0;
    pq.push({0, v});
    while(!pq.empty()){
        a=pq.top().se;
        b=pq.top().fi;
        pq.pop();
        if(b!=attv[a])
            continue;
        for(auto p : graph[a]){
            if(attv[p.se]>attv[a]+p.fi){
                attv[p.se]=attv[a]+p.fi;
                pq.push({attv[p.se], p.se});
            }
        }
    }
    atts[s]=0;
    pq.push({0, s});
    while(!pq.empty()){
        a=pq.top().se;
        b=pq.top().fi;
        pq.pop();
        if(b!=atts[a])
            continue;
        for(auto p : graph[a]){
            if(atts[p.se]>atts[a]+p.fi){
                atts[p.se]=atts[a]+p.fi;
                pq.push({atts[p.se], p.se});
            }
        }
    }
    attt[t]=0;
    pq.push({0, t});
    while(!pq.empty()){
        a=pq.top().se;
        b=pq.top().fi;
        pq.pop();
        if(b!=attt[a])
            continue;
        for(auto p : graph[a]){
            if(attt[p.se]>attt[a]+p.fi){
                attt[p.se]=attt[a]+p.fi;
                pq.push({attt[p.se], p.se});
            }
        }
    }
    int ans=INT_MAX;
    for(int i=1; i<=n; i++){
        if(atts[i]+attt[i]==atts[t]){
            ans=min(ans, attv[i]);
        }
    }
    cout << ans;
    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...