Submission #1305196

#TimeUsernameProblemLanguageResultExecution timeMemory
1305196ngocphuCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
2096 ms36068 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const long long INF = 2000000000000000000LL; const int maxN = 2e5 + 4; const int LOG = 18; // 2^LOG >= numNode const int dx[] = {1,-1,0,0}; const int dy[] = {0,0,1,-1}; const int MOD = 1e9 + 7; const double PI = 3.14159265; int n, m, s, t, u, v; ll ans = INF; vector<pair<int,int>> E[maxN]; vector<vector<ll>> D(maxN, vector<ll>(3, INF)); vector<vector<ll>> best(maxN, vector<ll>(2, INF)); void dijk(int st, int type) { priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> q; q.push({0, st}); D[st][type] = 0; while(!q.empty()) { pair<ll,int> h = q.top();q.pop(); ll w = h.first, u = h.second; if (w > D[u][type]) continue; for (pair<int,int> x : E[u]) { int v = x.first, weight = x.second; if (D[v][type] > D[u][type] + weight) { D[v][type] = D[u][type] + weight; q.push({D[v][type], v}); } } } } void dfs(int i) { best[i][0] = D[i][1]; best[i][1] = D[i][2]; for (pair<int,int> x : E[i]) { int j = x.first, w = x.second; if (D[j][0] + w != D[i][0]) continue; dfs(j); best[i][0] = min(best[i][0], best[j][0]); best[i][1] = min(best[i][1], best[j][1]); } ans = min(ans, D[i][1] + best[i][1]); ans = min(ans, D[i][2] + best[i][0]); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("BUS.INP","r",stdin); // freopen("BUS.OUT","w",stdout); cin >> n >> m >> s >> t >> u >> v; for (int i = 1; i <= m; ++i) { int a, b, c; cin >> a >> b >> c; E[a].push_back({b, c}); E[b].push_back({a, c}); } dijk(s, 0); dijk(u, 1); dijk(v, 2); ans = D[v][1]; dfs(t); cout << ans; 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...