Submission #1273750

#TimeUsernameProblemLanguageResultExecution timeMemory
1273750quanw267Commuter Pass (JOI18_commuter_pass)C++17
0 / 100
74 ms13172 KiB
#include<bits/stdc++.h> #define ll long long #define fi first #define se second #define pii pair<long long,long long> #define fast ios_base::sync_with_stdio(0), cin.tie(0); using namespace std; const long long N = 1e5; const long long INF = 1e16; vector<pii> g[N+5]; void path(long long n, long long u, long long *d){ vector<long long> vis(n+2, 0); for(long long i=1; i<=n; i++) d[i] = INF; d[u] = 0; priority_queue<pii,vector<pii>,greater<pii>> q; q.push({0,u}); while(!q.empty()){ auto [kc,u] = q.top(); q.pop(); if(vis[u]) continue; vis[u] = 1; for(auto [v,w]:g[u]){ if(d[v] > d[u] + w){ d[v] = d[u] + w; q.push({d[v],v}); } } } } long long d[1005][1005]; // an toàn hơn là 1005 thay vì 1000 int main(){ fast long long n,m; cin >> n >> m; long long A,B; cin >> A >> B; long long C,D; cin >> C >> D; for(long long i=1; i<=m; i++){ long long u,v,w; cin >> u >> v >> w; g[u].push_back({v,w}); g[v].push_back({u,w}); } if(n <= 1000){ for(long long i=1; i<=n; i++) path(n, i, d[i]); ll res = d[C][D]; ll kcAB = d[A][B]; for(int u=1; u<=n; u++){ for(auto [v,w]: g[u]){ if(u < v){ if(d[A][u] + w + d[v][B] == kcAB){ res = min(res, d[C][u] + d[v][D]); res = min(res, d[C][v] + d[u][D]); } } } } cout << res; return 0; } 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...