| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1331659 | Naa | Cities (BOI16_cities) | C++20 | 2060 ms | 49384 KiB |
#include <bits/stdc++.h>
using namespace std;
mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());
using i32 = long long;
#define all(a) (a).begin(), (a).end()
#define open(x) if(fopen(#x ".inp", "r")) {freopen(#x ".inp", "r", stdin); freopen(#x ".out", "w", stdout);}
template<class X, class Y> bool mimi(X &x, const Y &y) {if(x > y) {x = y; return 1;} return 0;}
template<class X, class Y> bool mama(X &x, const Y &y) {if(x < y) {x = y; return 1;} return 0;}
const i32 N = 1e5 + 5;
const i32 M = 1000000007;
const i32 inf = 1000000009;
const i32 infll = (i32)1000000000000000018;
struct edge {i32 u, v, c;};
struct Edge {i32 v, c;};
i32 n, k, m;
i32 dp[N][1 << 5], spec[N];
vector<i32> sm[N];
vector<Edge> g[N];
vector<edge> ee;
void sad(i32 testID) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k >> m;
for(i32 i = 0; i < k; i ++) {
cin >> spec[i];
spec[i] --;
}
for(i32 i = 0; i < m; i ++) {
i32 u, v; i32 c;
cin >> u >> v >> c;
u --; v --;
ee.push_back({u, v, c});
g[u].push_back({v, c});
g[v].push_back({u, c});
}
memset(dp, 0x3f, sizeof dp);
for(i32 i = 0; i < k; i ++)
dp[spec[i]][1 << i] = 0;
for(i32 mask = 1; mask < (1 << k); mask ++) {
for(i32 sub = (mask - 1) & mask; sub; sub = (sub - 1) & mask) {
for(i32 u = 0; u < n; u ++) {
mimi(dp[u][mask], dp[u][sub] + dp[u][mask ^ sub]);
}
}
priority_queue<pair<i32,i32>, vector<pair<i32,i32>>, greater<>> pq;
vector<bool> vis(n, false);
for(i32 i = 0; i < n; i ++)
if(dp[i][mask] < infll) pq.push({dp[i][mask], i});
while(!pq.empty()) {
pair<i32, i32> temp = pq.top(); pq.pop();
i32 d = temp.first, u = temp.second;
if(vis[u]) continue;
vis[u] = true;
for(auto &e : g[u]) {
if(mimi(dp[e.v][mask], d + e.c))
pq.push({dp[e.v][mask], e.v});
}
}
}
i32 res = infll;
for(i32 i = 0; i < n; i ++) mimi(res, dp[i][(1 << k) - 1]);
cout << res << "\n";
}
signed main() {
auto begin = std::chrono::high_resolution_clock::now();
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
open(task)
i32 t = 1;
// cin >> t;
for(i32 testID = 1; testID <= t; testID ++) {
// cout << "Case #" << testID << ":\n";
sad(testID);
}
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
// cerr << endl << "Time measured: " << elapsed.count() * 1e-9 << " seconds." << endl;
return 0;
}컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
