제출 #328379

#제출 시각아이디문제언어결과실행 시간메모리
328379dooweyCities (BOI16_cities)C++14
100 / 100
3867 ms52180 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N = (int)1e5 + 100; const int K = 5; const ll inf = (ll)1e18; vector<pii> T[N]; ll dist[N][1 << K]; struct state{ ll dis; int node; int mask; bool operator<(const state &q) const { return dis > q.dis; } }; bool use[N][1 << K]; int main(){ fastIO; int n, k, m; cin >> n >> k >> m; vector<int> q(k); for(int i =0 ; i < k ; i ++ ){ cin >> q[i]; } int u, v; ll w; for(int i = 0 ; i < m ; i ++ ){ cin >> u >> v >> w; T[u].push_back(mp(v, w)); T[v].push_back(mp(u, w)); } for(int i = 1; i <= n; i ++) { for(int j = 1; j < (1 << k); j ++ ){ dist[i][j] = inf; } } for(int j = 0 ; j < k ; j ++ ){ dist[q[j]][(1<<j)]=0; } int node; ll dd; for(int ms = 1 ; ms < (1 << k) ; ms ++ ){ for(int c = 0 ; c <= ms ; c ++ ){ if(ms & c){ for(int i = 1 ; i <= n; i ++ ){ dist[i][ms] = min(dist[i][ms], dist[i][c]+dist[i][(ms^c)]); } } } priority_queue<pii,vector<pii>,greater<pii>> pq; for(int i = 1; i <= n; i ++ ){ if(dist[i][ms] == inf) continue; pq.push(mp(dist[i][ms], i)); } while(!pq.empty()){ node = pq.top().se; dd = pq.top().fi; pq.pop(); if(use[node][ms]) continue; use[node][ms]=true; for(auto x : T[node]){ if(dist[x.fi][ms] > dist[node][ms] + x.se){ dist[x.fi][ms] = dist[node][ms] + x.se; pq.push(mp(dist[x.fi][ms],x.fi)); } } } } ll outp = inf; for(int i = 1; i <= n; i ++ ) outp = min(outp, dist[i][(1<<k)-1]); cout << outp << "\n"; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

cities.cpp: In function 'int main()':
cities.cpp:56:8: warning: variable 'dd' set but not used [-Wunused-but-set-variable]
   56 |     ll dd;
      |        ^~
#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...