Submission #746071

#TimeUsernameProblemLanguageResultExecution timeMemory
746071vjudge1Cities (BOI16_cities)C++17
0 / 100
3 ms596 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define mp make_pair #define pii pair<int, int> #define fi first #define se second struct edge { int from, to, wei; bool operator < (const edge &other) const { return wei > other.wei; } }; const int maxn = 1000; const int inf = 1e16 + 42; int n, k, m; vector<edge> graph[1 + maxn]; bool special[1 + maxn]; vector<int> specials; void dijkstra(int source, vector<int> &dist, vector<int> &path) { dist.assign(1 + n, -1); path.assign(1 + n, -1); // dist[source] = 0; priority_queue<edge> q; q.push({0, source, 1}); while(!q.empty()) { edge cur = q.top(); q.pop(); if(dist[cur.to] != -1) { continue; } dist[cur.to] = cur.wei; path[cur.to] = cur.from; for(const edge &nei : graph[cur.to]) { if(dist[nei.to] == -1 || dist[nei.to] /*<*/> dist[cur.to] + nei.wei) { q.push({cur.to, nei.to, dist[cur.to] + nei.wei}); } } } } vector<pii > prs = {{0, 1}, {0, 2}, {0, 3}}; vector<pii > opp_prs = {{2, 3}, {1, 3}, {1, 2}}; void solve() { cin >> n >> k >> m; for(int i = 0; i < k; i++) { int x; cin >> x; special[x] = true; specials.pb(x); } for(int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; graph[a].pb({a, b, c}); graph[b].pb({b, a, c}); } int ans = inf; vector<vector<int> > distances(k); vector<vector<int> > path(k); for(int i = 0; i < k; i++) { dijkstra(specials[i], distances[i], path[i]); } #define dist distances #define sp specials for(int idx = 0; idx < 3; idx++) { int a = prs[idx].fi, b = prs[idx].se; int c = opp_prs[idx].fi, d = opp_prs[idx].se; int cur = 0; cur += dist[a][sp[b]]; int minc = inf, mind = inf; int x = sp[b]; while(x != 0) { minc = min(minc, dist[c][x]); mind = min(mind, dist[d][x]); x = path[a][x]; } cur += minc; cur += mind; if(ans > cur) { ans = cur; } } cout << ans << "\n"; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); solve(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...