제출 #833924

#제출 시각아이디문제언어결과실행 시간메모리
833924vjudge1Commuter Pass (JOI18_commuter_pass)C++17
0 / 100
348 ms30776 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define pli pair<long long,int>
using namespace std;

const int nmax=2e5+1;
const int mod=1e9+7;

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

void dijkstra(int 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(int b,long long c[],vector<int> s[])
{
    for(int 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});
            }
        }
    }
}

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

int main()
{
    int s,t,u,v;
    cin>>n>>m;
    cin>>s>>t;
    cin>>u>>v;
    for(int 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(int 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(int 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=1e18;
    spdijkstra(u,kq,vt1);
    ans=kq[v];
    spdijkstra(v,kq,vt1);
    ans=min(ans,kq[u]);
    cout<<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...