제출 #84239

#제출 시각아이디문제언어결과실행 시간메모리
84239VinhspmCities (BOI16_cities)C++14
74 / 100
6090 ms235512 KiB
#include<bits/stdc++.h> using namespace std; #define fi first #define se second #define FOR(a, b, c) for(int a = b; a <= c; ++a) #define int long long #define pb push_back const int N = 1e5 + 10; const int oo = 1e18; typedef pair<int, int> ii; typedef pair<int, ii> pii; int n, k, m; int f[N][(1 << 5)], pos[N]; vector<ii> vi[N]; void upd(int &x, int y) { x = min(x, y); } void solve() { FOR(i, 1, n) FOR(j, 0, (1 << k) - 1) f[i][j] = oo; priority_queue<pii, vector<pii>, greater<pii> > pq; FOR(i, 1, n) { int mask = 0; if(pos[i]) mask = (1 << (pos[i] - 1)); f[i][mask] = 0; pq.push(pii(0, ii(i, mask))); } while(!pq.empty()) { int u = pq.top().se.fi, mask = pq.top().se.se, val = pq.top().fi; pq.pop(); //cout << u << ' ' << mask << '\n'; if(f[u][mask] != val) continue; for(auto v: vi[u]) { for(int t = 0; t < (1 << k); ++t) if(!(mask & t)) { int nex = (mask | t); if(f[v.fi][nex] > f[u][mask] + v.se + f[v.fi][t]) { f[v.fi][nex] = f[u][mask] + v.se + f[v.fi][t]; pq.push(pii(f[v.fi][nex], ii(v.fi, nex))); } } } } } signed main() { //freopen("test.inp", "r", stdin); scanf("%lld%lld%lld", &n, &k, &m); FOR(i, 1, k) { int x; scanf("%lld", &x); pos[x] = i; } FOR(i, 1, m) { int u, v, c; scanf("%lld%lld%lld", &u, &v, &c); vi[u].pb(ii(v, c)); vi[v].pb(ii(u, c)); } solve(); int ans = oo; FOR(i, 1, n) upd(ans, f[i][(1 << k) - 1]); printf("%lld", ans); }

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

cities.cpp: In function 'int main()':
cities.cpp:47:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld%lld%lld", &n, &k, &m);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
cities.cpp:49:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         int x; scanf("%lld", &x);
                ~~~~~^~~~~~~~~~~~
cities.cpp:53:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         int u, v, c; scanf("%lld%lld%lld", &u, &v, &c);
                      ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...