Submission #834011

#TimeUsernameProblemLanguageResultExecution timeMemory
834011vjudge1Commuter Pass (JOI18_commuter_pass)C++17
0 / 100
87 ms28476 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define pli pair<long long,long long>
using namespace std;

const long long nmax=1e5+1;

long long dp[nmax],dq[nmax],kq[nmax];
vector<pli> g[nmax];
vector<long long> vt1[nmax];
long long n,m;
priority_queue<pli,vector<pli>,greater<pli>> pq;

void dijkstra(long long b,long long c[],vector<pli> s[])
{
    pq.push({0,b});
    while(!pq.empty()){
        auto [p,u]=pq.top();
        pq.pop();
        if(p>c[u]) continue;
        for(auto [w,v]:s[u]){
            if(c[v]>p+w){
                c[v]=w+p;
                pq.push({c[v],v});
            }
        }
    }
}

void spdijkstra(long long b,long long c[],vector<long long> s[])
{
    for(long long i=1;i<=n;i++)
        c[i]=1e18;
    c[b]=0;
    pq.push({0,b});
    while(!pq.empty()){
        auto [p,u]=pq.top();
        pq.pop();
        if(p>c[u]) continue;
        for(auto [w,v]:g[u]){
            if(c[v]>p+w){
                c[v]=w+p;
                pq.push({c[v],v});
            }
        }
        for(auto v:s[u]){
            if(c[v]>p){
                c[v]=p;
                pq.push({c[v],v});
            }
        }
    }
}

long long x[nmax],y[nmax],w[nmax];

int main()
{
    long long s,t,u,v;
    cin>>n>>m;
    cin>>s>>t;
    cin>>u>>v;
    for(long long i=1;i<=m;i++){
        cin>>x[i]>>y[i]>>w[i];
        g[x[i]].push_back({w[i],y[i]});
        g[y[i]].push_back({w[i],x[i]});
    }

    for(long long i=1;i<=n;i++)
        dp[i]=dq[i]=1e18;

    dp[s]=0;
    dijkstra(s,dp,g);
    dq[t]=0;
    dijkstra(t,dq,g);

    for(long long i=1;i<=m;i++){
        if(dp[x[i]]+w[i]+dq[y[i]]==dp[t]){
            vt1[x[i]].push_back(y[i]);
        }
    }

    long long ans;
    spdijkstra(u,kq,vt1);
    ans=kq[v];
    spdijkstra(v,kq,vt1);
    ans=min(ans,kq[u]);
    cout<<min(kq[u],ans);
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...