Submission #913952

#TimeUsernameProblemLanguageResultExecution timeMemory
913952a_l_i_r_e_z_aCommuter Pass (JOI18_commuter_pass)C++17
100 / 100
376 ms33848 KiB
// In the name of God // Hope is last to die #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<int, int> pii; #define pb push_back #define S second #define F first #define mp make_pair #define smax(x, y) (x) = max((x), (y)) #define smin(x, y) (x) = min((x), (y)) #define all(x) (x).begin(), (x).end() #define len(x) ((int)(x).size()) const int maxn = 1e5 + 5; const ll inf = 1e18 + 7; ll n, m, s, t, x, y, ans = inf, d[maxn][3], dp[maxn][3]; set<pll> st; vector<pll> adj[maxn]; vector<int> g[maxn]; bool mark[maxn]; void dij(int v, int ind){ st.clear(); st.insert(mp(0, v)); d[v][ind] = 0; while(st.size()){ ll v = (*st.begin()).S, dist = (*st.begin()).F; st.erase(st.begin()); for(auto [u, w]: adj[v]){ if(d[v][ind] + w < d[u][ind]){ st.erase(mp(d[u][ind], u)); d[u][ind] = d[v][ind] + w; st.insert(mp(d[u][ind], u)); } } } } void dfs(int v){ mark[v] = 1; dp[v][1] = dp[v][2] = inf; for(auto u: g[v]){ if(!mark[u]) dfs(u); smin(dp[v][1], dp[u][1]); smin(dp[v][2], dp[u][2]); } if(dp[v][1] == inf){ if(v == t){ dp[v][1] = d[v][1]; dp[v][2] = d[v][2]; } } else{ smin(dp[v][1], d[v][1]); smin(dp[v][2], d[v][2]); } smin(ans, d[v][1] + dp[v][2]); smin(ans, d[v][2] + dp[v][1]); } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); memset(d, 63, sizeof d); cin >> n >> m >> s >> t >> x >> y; for(int i = 1; i <= m; i++){ int u, v, w; cin >> u >> v >> w; adj[u].pb(mp(v, w)); adj[v].pb(mp(u, w)); } dij(s, 0); dij(x, 1); dij(y, 2); for(int i = 1; i <= n; i++){ for(auto [u, w]: adj[i]){ if(d[i][0] + w == d[u][0]) g[i].pb(u); } } dfs(s); cout << min(ans, d[y][1]) << '\n'; return 0; }

Compilation message (stderr)

commuter_pass.cpp: In function 'void dij(int, int)':
commuter_pass.cpp:34:33: warning: unused variable 'dist' [-Wunused-variable]
   34 |         ll v = (*st.begin()).S, dist = (*st.begin()).F;
      |                                 ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...