제출 #1167621

#제출 시각아이디문제언어결과실행 시간메모리
1167621afvrevebvaCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
2094 ms327680 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

const ll C=1e9;
const ll M=2e5;

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    ll n,m,s,t,u,v;
    cin>>n>>m>>s>>t>>u>>v;
    vector<vector<pair<int,ll>>> adj(n+1);
    for(int i=0;i<m;i++){
        ll a,b,c;
        cin>>a>>b>>c;
        adj[a].push_back({b,c});
        adj[b].push_back({a,c});
    }
    vector<ll> cu(n+1,C*M);
    cu[u]=0;
    queue<int> q;
    q.push(u);
    while(!q.empty()){
        int i=q.front();
        q.pop();
        for(pair<int,ll> p:adj[i]){
            ll j,c;
            tie(j,c)=p;
            if(cu[j]>cu[i]+c){
                cu[j]=cu[i]+c;
                q.push(j);
            }
        }
    }
    vector<ll> cv(n+1,C*M);
    cv[v]=0;
    q.push(v);
    while(!q.empty()){
        int i=q.front();
        q.pop();
        for(pair<int,ll> p:adj[i]){
            ll j,c;
            tie(j,c)=p;
            if(cv[j]>cv[i]+c){
                cv[j]=cv[i]+c;
                q.push(j);
            }
        }
    }
    vector<vector<ll>> cs(n+1,vector<ll>(3,C*M));
    cs[s][0]=0;
    cs[s][1]=cu[s];
    cs[s][2]=cv[s];
    q.push(s);
    while(!q.empty()){
        int i=q.front();
        q.pop();
        for(pair<int,ll> p:adj[i]){
            ll j,c;
            tie(j,c)=p;
            if(cs[j][0]>=cs[i][0]+c){
                cs[j][0]=cs[i][0]+c;
                ll mn1=min(cs[i][1],cu[j]);
                ll mn2=min(cs[i][2],cv[j]);
                if(cs[j][1]+cs[j][1]>mn1+mn2){
                    cs[j][1]=mn1;
                    cs[j][2]=mn2;
                }
                q.push(j);
            }
        }
    }
    cout<<min(cs[t][1]+cs[t][2],cu[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...