# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
77043 | 2018-09-20T09:03:03 Z | farukkastamonuda | Cities (BOI16_cities) | C++14 | 2697 ms | 97928 KB |
//Power Of Ninja Go #include <bits/stdc++.h> //#ifdef atom #else #endif using namespace std; typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; typedef vector< ii > vii; #define X first #define Y second #define pb push_back const int maxn = 1e5+5; vii adj[maxn]; ll dp[32][maxn]; int main() { int n, k, m; scanf("%d %d %d", &n, &k, &m); vi imp; imp.resize(k); for(int i = 0; i< k; i++) scanf("%d", &imp[i]); for(int i = 0; i< m; i++) { int u, v, w; scanf("%d %d %d", &u, &v, &w); adj[u].pb(ii(v, w)); adj[v].pb(ii(u, w)); } for(int a = 0; a< 32; a++) { for(int u = 1; u<= n; u++) dp[a][u] = 4e18; } for(int i = 0; i< k; i++) { dp[1<<i][imp[i]] = 0; } for(int bit = 1; bit< (1<<k); bit++) { for(int part = 0; part< bit; part++) { if((part | bit) != bit) continue; int rem = bit-part; for(int u = 1; u<= n; u++) dp[bit][u] = min(dp[bit][u], dp[part][u]+dp[rem][u]); } priority_queue< pair<ll, int> > pq; for(int i = 1; i<= n; i++) { if(dp[bit][i] != 4e18) { pq.push(make_pair(-dp[bit][i], i)); } } while(!pq.empty()) { ll w = -pq.top().X; int u = pq.top().Y; pq.pop(); if(dp[bit][u] != w) continue; for(auto edge : adj[u]) { int v = edge.X, w = edge.Y; if(dp[bit][v]> dp[bit][u]+w) { dp[bit][v] = dp[bit][u]+w; pq.push(make_pair(-dp[bit][v], v)); } } } } ll res = 4e18; for(int i = 1; i<= n; i++) res = min(res, dp[(1<<k)-1][i]); cout << res << endl; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 4 ms | 2812 KB | Output is correct |
2 | Correct | 4 ms | 2960 KB | Output is correct |
3 | Correct | 4 ms | 2984 KB | Output is correct |
4 | Correct | 4 ms | 3080 KB | Output is correct |
5 | Correct | 4 ms | 3080 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 667 ms | 45000 KB | Output is correct |
2 | Correct | 659 ms | 49072 KB | Output is correct |
3 | Correct | 383 ms | 49072 KB | Output is correct |
4 | Correct | 110 ms | 49072 KB | Output is correct |
5 | Correct | 364 ms | 57064 KB | Output is correct |
6 | Correct | 100 ms | 57064 KB | Output is correct |
7 | Correct | 7 ms | 57064 KB | Output is correct |
8 | Correct | 6 ms | 57064 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 57064 KB | Output is correct |
2 | Correct | 12 ms | 57064 KB | Output is correct |
3 | Correct | 9 ms | 57064 KB | Output is correct |
4 | Correct | 9 ms | 57064 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1301 ms | 67264 KB | Output is correct |
2 | Correct | 1281 ms | 71356 KB | Output is correct |
3 | Correct | 907 ms | 71356 KB | Output is correct |
4 | Correct | 784 ms | 71356 KB | Output is correct |
5 | Correct | 238 ms | 71356 KB | Output is correct |
6 | Correct | 116 ms | 71356 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2684 ms | 89460 KB | Output is correct |
2 | Correct | 2697 ms | 93836 KB | Output is correct |
3 | Correct | 2576 ms | 97928 KB | Output is correct |
4 | Correct | 1761 ms | 97928 KB | Output is correct |
5 | Correct | 1336 ms | 97928 KB | Output is correct |
6 | Correct | 336 ms | 97928 KB | Output is correct |
7 | Correct | 123 ms | 97928 KB | Output is correct |