Submission #1167683

#TimeUsernameProblemLanguageResultExecution timeMemory
1167683edga1Commuter Pass (JOI18_commuter_pass)C++20
31 / 100
173 ms15800 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")

using namespace std;

vector<pair<int,int>> e[100005];

void d(int s, vector<long long> &att){
    att[s]=0;
    priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> pq;
    vector<int> seen(100005,0);
    pq.push({0,s});
    while(!pq.empty()){
        auto cur=pq.top();
        int pos=cur.second;
        pq.pop();
        if(!seen[pos]){
            for(int i=0; i<e[pos].size(); i++){
                if(att[pos]+e[pos][i].second<att[e[pos][i].first] || att[e[pos][i].first]==-1){
                    att[e[pos][i].first]=att[pos]+e[pos][i].second;
                    pq.push({att[pos]+e[pos][i].second,e[pos][i].first});
                }
            }
            seen[pos]=1;
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,m,s,t,u,v;
    cin>>n>>m>>s>>t>>u>>v;
    for(int i=0; i<m; i++){
        int a,b,c;
        cin>>a>>b>>c;
        e[a].push_back({b,c});
        e[b].push_back({a,c});
    }
    vector<long long> ds(100005,-1), dt(100005,-1), dv(100005,-1), du(100005,-1);
    d(s,ds);
    d(t,dt);
    d(v,dv);
    d(u,du);
    long long rv=-1,ru=-1;
    for(int i=1; i<=n; i++){
        if(ds[t]==ds[i]+dt[i]){
            if(rv==-1 || dv[i]<rv) rv=dv[i];
            if(ru==-1 || du[i]<ru) ru=du[i];
        }
    }
    cout<<min(ru+rv,du[v]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...