Submission #884520

#TimeUsernameProblemLanguageResultExecution timeMemory
884520mohammadsamCommuter Pass (JOI18_commuter_pass)C++14
24 / 100
36 ms7980 KiB
/*
    in the name of god
    created by: mohammadsam
*/

#include <bits/stdc++.h>

using namespace std;
#define int long long 
typedef pair<int,int> pii;
typedef pair<long long ,long long> pll;
typedef long long ll ;

#define min_heap(X)   priority_queue<X,vector<X>,greater<X>>
#define max_heap(X)   priority_queue<X>
#define File          freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#define loop(i,f,d)   for(int i = f;i<d;i++)
#define loop2(j,f,d)  for(int j = f;j>=d;j--)
#define len(V)        V.size()
#define sep           ' '
#define endl          '\n'
#define pb(x)         push_back(x)
#define debug(x)      cerr  << "bug " << x << endl;
#define migmig        cin.tie(NULL);ios_base::sync_with_stdio(false);
#define fi            first
#define sec           second
#define popcount(x)   __builtin_popcount(x)
#define md(x)         (((x%MD)+MD)%MD)
#define all(V)        V.begin(),V.end()
#define Mp(a,b)       make_pair(a,b)
#define gaws(a,b)     (((b-a+1LL)*(a+b))/2LL)
#define vvi           vector<vector<int>>
#define setprec(x)    fixed << setprecision(x)

const ll N = 1000, MD = 1e9 + 7;
const ll inf = 1e17 , riz = -2e9;
int n , m , s, t , u ,v;
vector<pii> g[N];
int dis[N][N];
min_heap(pii) pq;
int ans = inf;
void dij(int u,int p){
    fill(dis[p],dis[p]+n+1,inf);
    dis[p][u] = 0;
    pq.push(Mp(0,u));
    while(!pq.empty()){
        auto [d,u] = pq.top();pq.pop();
        if(d!=dis[p][u]) continue;
        for(auto [h,w] : g[u]){
            if(dis[p][h] > dis[p][u] + w){
                dis[p][h] = dis[p][u] + w;
                pq.push(Mp(dis[p][h],h));
            }
        }
    }
}
int32_t main() {
    migmig
    cin >> n >> m >> s >> t >> u >> v;
    loop(i,0,m){
        int a,b,w;
        cin >> a >> b >> w;
        g[a].pb(Mp(b,w));
        g[b].pb(Mp(a,w));
    }
    loop(i,1,n+1) dij(i,i);
    int ans = dis[u][v];
    loop(i,1,n+1){
        loop(j,1,n+1){
            if(dis[s][i] + dis[i][j] + dis[j][t] == dis[s][t]){
                ans = min(ans,dis[u][i]+dis[v][j]);
                ans = min(ans,dis[v][i]+dis[u][j]);
            } 
        }
    }
    cout << ans << endl;
    
    return 0;
}

Compilation message (stderr)

commuter_pass.cpp: In function 'void dij(long long int, long long int)':
commuter_pass.cpp:47:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   47 |         auto [d,u] = pq.top();pq.pop();
      |              ^
commuter_pass.cpp:49:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   49 |         for(auto [h,w] : g[u]){
      |                  ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...