Submission #1342450

#TimeUsernameProblemLanguageResultExecution timeMemory
1342450prikpaoCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
193 ms22616 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#define pii pair<int, int>
#define t3 tuple<int, int, int>
#define pepperX ios_base::sync_with_stdio(false); cin.tie(0);
using ll = long long;
using namespace std;
#define int ll

struct A{
    int a, w;
    bool operator<(const A& o)const{
        return w>o.w;
    }
};

vector<t3> g[100005];
int dis[100005];
pii par[100005];

void solve(){
    int n, m, s, t, ss, tt;
    cin >> n >> m;
    cin >> s >> t;
    cin >> ss >> tt;
    for(int i=1; i<=m; i++){
        int a, b, w;
        cin >> a >> b >> w;
        g[a].push_back({b, w, i});
        g[b].push_back({a, w, i});
    }
    fill(dis+1, dis+n+1, 1e18);
    priority_queue<A> pq;
    pq.push({s, 0});
    dis[s]=0;
    while(!pq.empty()){
        auto [u,w]=pq.top();
        pq.pop();

        if(w>dis[u])continue;
        if(u==t)break;

        for(auto [v,ww,id]:g[u]){
            if(w+ww<dis[v]){
                dis[v]=w+ww;
                pq.push({v, w+ww});
                par[v]={u, id};
            }
        }
    }
    vector<int> path;
    int now=t;
    while(now!=s){
        path.push_back(par[now].second);
        now=par[now].first;
    }
    sort(path.begin(), path.end());
    //for(auto e:path)cout << e << ' ';
    while(!pq.empty())pq.pop();
    fill(dis+1, dis+n+1, 1e18);
    pq.push({ss,  0});
    dis[ss]=0;
    while(!pq.empty()){
        auto [u,w]=pq.top();
        pq.pop();

        if(w>dis[u])continue;
        if(u==tt){
            cout << w;
            return;
        }

        for(auto [v,ww,id]:g[u]){
            if(binary_search(path.begin(), path.end(), id))ww=0;
            if(w+ww<dis[v]){
                dis[v]=w+ww;
                pq.push({v, w+ww});
            }
        }
    }
}

int32_t main(){
    pepperX;
    int tcs=1;
    //cin >> tcs;
    while(tcs--) solve();
    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...