Submission #1265134

#TimeUsernameProblemLanguageResultExecution timeMemory
1265134vlomaczkOlympic Bus (JOI20_ho_t4)C++20
0 / 100
1093 ms3260 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> typedef long long ll; using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; struct Edge { ll a, b, c, d; }; int M = 210; vector<vector<pair<int, int>>> g(M); vector<Edge> edges; vector<ll> dijkstra(int s) { vector<ll> dist(M, LLONG_MAX); dist[s] = 0; priority_queue<pair<int, int>> pq; pq.push({0, s}); while(pq.size()) { auto[dv, v] = pq.top(); pq.pop(); dv*=-1; if(dv!=dist[v]) continue; for(auto[u, w] : g[v]) { if(dv + w < dist[u]) { dist[u] = dv+w; pq.push({-dist[u], u}); } } } return dist; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; for(int i=0; i<m; ++i) { int a, b, c, d; cin >> a >> b >> c >> d; g[a].push_back({b, c}); g[b].push_back({a, c}); Edge e = {a, b, c, d}; edges.emplace_back(e); } ll ans = dijkstra(1)[n] + dijkstra(n)[1]; for(int i=0; i<m; ++i) { g.assign(M, vector<pair<int, int>>()); for(int j=0; j<m; ++j) { auto[a,b,c,d] = edges[i]; if(j==i) swap(a,b); ll sa = d + dijkstra(1)[n] + dijkstra(n)[1]; ans = min(ans, sa); } } if(ans == LLONG_MAX) cout << "-1\n"; else cout << ans << "\n"; 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...