Submission #833272

#TimeUsernameProblemLanguageResultExecution timeMemory
833272vjudge1Commuter Pass (JOI18_commuter_pass)C++17
0 / 100
2041 ms19696 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> const int INF = 2147483645; const int maxN = (int)1e5+5; const ll LLINF = LLONG_MAX; //const ll mod = 998244353; const ll mod = 1000000007; vector<pair<int, ll>> adj[maxN], adj2[maxN]; vector<ll> d, d2; vector<int> p, p2; int n; void dijkstra(int s) { d.assign(n+1, LLINF); p.assign(n+1, -1); vector<bool> u(n+1, false); d[s] = 0; for (int i = 0; i < n; i++) { int v = -1; for (int j = 0; j < n; j++) { if (!u[j] && (v == -1 || d[j] < d[v])) v = j; } if (d[v] == LLINF) break; u[v] = true; for (auto edge : adj[v]) { int to = edge.first; int len = edge.second; if (d[v] + len < d[to]) { d[to] = d[v] + len; p[to] = v; } } } } void dijkstra2(int s) { d2.assign(n+1, LLINF); p2.assign(n+1, -1); vector<bool> u(n+1, false); d2[s] = 0; for (int i = 0; i < n; i++) { int v = -1; for (int j = 0; j < n; j++) { if (!u[j] && (v == -1 || d2[j] < d2[v])) v = j; } if (d2[v] == LLINF) break; u[v] = true; for (auto edge : adj2[v]) { int to = edge.first; int len = edge.second; if (d2[v] + len < d2[to]) { d2[to] = d2[v] + len; p2[to] = v; } } } } vector<int> restore_path(int s, int t) { vector<int> path; for (int v = t; v != s; v = p[v]) path.push_back(v); path.push_back(s); reverse(path.begin(), path.end()); return path; } void solv() { int m, s, t, u, v, a, b; vector<pair<pii, ll>> vec; ll c; cin>>n>>m; cin>>s>>t; cin>>u>>v; for (int i=0;i<m;i++) { cin>>a>>b>>c; vec.pb(mp(mp(a, b), c)); adj[a].pb(mp(b, c)); adj[b].pb(mp(a, c)); } dijkstra(s); vector<int> pth = restore_path(s, t); map<int, int> chk; int len = pth.size(); for (int i=0;i<len-1;i++) { chk[pth[i]] = pth[i+1]; } for (int i=0;i<m;i++) { a = vec[i].first.first; b = vec[i].first.second; c = vec[i].second; if (chk[a] == b || chk[b] == a) c = 0; adj2[a].pb(mp(b, c)); adj2[b].pb(mp(a, c)); } dijkstra2(u); cout<<d2[v]<<'\n'; } int main() { ios::sync_with_stdio(0); cin.tie(0); int t=1; // cin>>t; while (t--) solv(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...