제출 #1158755

#제출 시각아이디문제언어결과실행 시간메모리
1158755the_ZHERCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
2094 ms23292 KiB
#include <bits/stdc++.h>
#define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
using namespace std;
const int inf=1e17;
const int N=1e5+5;
const int N1=1e5+5;
const int N2=5e6+6;
const int mod=1e9+7;
const int k1=447;
struct edge{
    int d,in;
};
struct edge1{
    int x,y,c;
};
vector<pair<int,int> >v1[N];
vector<edge1>v2;
int dp[6][N];
void djk(int a,int in){
    dp[in][a]=0;
    set<pair<int,int> >st;
    st.insert({a,0ll});
    while(st.size()>0){
        pair<int,int>b=*st.begin();
        st.erase(st.begin());
        for(int i=0;i<v1[b.first].size();i++){
            pair<int,int> x=v1[b.first][i];
            if(dp[in][x.first]>dp[in][b.first]+x.second){
                st.erase({x.first,dp[in][x.first]});
                dp[in][x.first]=dp[in][b.first]+x.second;
                st.insert({x.first,dp[in][x.first]});
            }
        }
    }
}
signed main(){
boost;
    int n,m,s,t,u,v;
    cin>>n>>m>>s>>t>>u>>v;
    for(int i=1;i<=m;i++){
        int x,y,c;
        cin>>x>>y>>c;
        v2.push_back({x,y,c});
        v1[x].push_back({y,c});
        v1[y].push_back({x,c});
    }
    for(int i=0;i<=3;i++){
        for(int j=1;j<=n;j++){
            dp[i][j]=inf;
        }
    }
    djk(s,0);
    djk(t,1);
    int cnt=dp[0][t];
    for(int i=0;i<m;i++){
        edge1 x=v2[i];
        if(dp[0][x.x]+dp[1][x.y]+x.c==cnt){
            v1[x.x].push_back({x.y,0ll});
        }
        if(dp[1][x.y]+dp[0][x.x]+x.c==cnt){
            v1[x.y].push_back({x.x,0ll});
        }
    }
    djk(u,2);
    cout<<dp[2][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...