Submission #1195164

#TimeUsernameProblemLanguageResultExecution timeMemory
1195164NonbangkokCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
244 ms17956 KiB
#include <bits/stdc++.h>
#define coutf(n, m) cout << fixed << setprecision(n) << m
#define forr(i, a, n) for (int i = a; i < n; i++)
#define forl(i, a, n) for (int i = a; i > n; i--)
#define macos ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define endll "\n"
#define sp " "
typedef long long ll;
using namespace std;

struct Non{
    int v;
    ll w;

    bool operator < (const Non &rhs)const{
        if(w!=rhs.w)return w>rhs.w;
        return v>rhs.v;
    }
};

const int N = 1e5 + 10;
int n,m,x,y,st,des,a,b;
int p[N];
ll dis[3][N],c,ans,ans1=1e18,ans2=1e18;
vector<pair<int,ll>> adj[N];
priority_queue<Non> q;

void dijkstra(int z, int s){
    forr(i,1,n+1)dis[s][i] = 1e18;
    q.push({z,dis[s][z]=0LL});
    while(!q.empty()){
        int u = q.top().v;
        q.pop();

        for(auto [v,w]:adj[u]){
            if(dis[s][v]>dis[s][u]+w){
                q.push({v,dis[s][v]=dis[s][u]+w});
                if(!s)p[v] = u;
            }
        }
    }
}

int main(){macos;

    cin >> n >> m >> x >> y >> st >> des;
    forr(i,1,n+1)p[i] = i;
    forr(i,0,m){
        cin >> a >> b >> c;
        adj[a].push_back({b,c});
        adj[b].push_back({a,c});
    }

    dijkstra(x,0);
    dijkstra(st,1);
    dijkstra(des,2);

    for(int u=y;u!=p[u];u=p[u])ans1 = min(ans1,dis[1][u]),ans2 = min(ans2,dis[2][u]);
    ans1 = min(ans1,dis[1][x]),ans2 = min(ans2,dis[2][x]);

    cout << min(dis[1][des],ans1+ans2);

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...