제출 #335021

#제출 시각아이디문제언어결과실행 시간메모리
335021limabeansCities (BOI16_cities)C++17
14 / 100
520 ms35476 KiB
#include <bits/stdc++.h> using namespace std; template<typename T> void out(T x) { cout << x << endl; exit(0); } #define watch(x) cout << (#x) << " is " << (x) << endl using ll = long long; const ll inf = 1e18; const int maxn = 1e6 + 5; void spa(vector<vector<pair<ll,int>>> g, vector<ll>& dist, int src) { int n = g.size(); dist.resize(n); for (int i=0; i<n; i++) { dist[i] = inf; } dist[src] = 0; priority_queue<pair<ll,int>> pq; pq.emplace(0,src); while (!pq.empty()) { auto cur = pq.top(); pq.pop(); ll wei = -cur.first; int at = cur.second; if (wei > dist[at]) continue; for (auto ed: g[at]) { ll d = ed.first; int to = ed.second; if (wei+d < dist[to]) { dist[to] = wei+d; pq.emplace(-dist[to], to); } } } } int n,m,k; vector<vector<pair<ll,int>>> g; bool imp[maxn]; vector<pair<ll,pair<int,int>>> edges; vector<int> a; vector<vector<ll>> dists; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>k>>m; g.resize(n); for (int i=0; i<k; i++) { int x; cin>>x; --x; imp[x]=true; a.push_back(x); } dists.resize(k); for (int i=0; i<m; i++) { int u,v,w; cin>>u>>v>>w; --u; --v; edges.push_back({w,{u,v}}); g[u].push_back({w,v}); g[v].push_back({w,u}); } for (int i=0; i<k; i++) { spa(g,dists[i],a[i]); } ll res = inf; // center of the tree (i) for (int i=0; i<n; i++) { ll cur = 0; // dist from important node to i for (int j=0; j<k; j++) { cur += dists[j][i]; } res = min(res, cur); } cout<<res<<endl; 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...