[13424] 비밀 모임
BOJ/Shortest Path2018. 7. 24. 16:29
### Dijkstra or Floyd ###
[13424] 비밀 모임 : http://boj.kr/13424
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <cstdio> #include <vector> #include <queue> using namespace std; const int INF=1e9; typedef pair<int, int> P; int main() { int tc; scanf("%d", &tc); while(tc--) { int n, m; scanf("%d%d", &n, &m); vector<P> g[101]; while(m--) { int a, b, c; scanf("%d%d%d", &a, &b, &c); g[a].push_back(P(b, c)); g[b].push_back(P(a, c)); } int k, f; scanf("%d", &k); vector<int> ans(n+1, 0); for(int i=0; i<k; i++) { scanf("%d", &f); vector<bool> visited(n+1); vector<int> dist(n+1, INF); dist[f] = 0; priority_queue<P> pq; pq.push(P(0, f)); while(!pq.empty()) { int cur; do { cur = pq.top().second; pq.pop(); } while(!pq.empty() && visited[cur]); if(visited[cur]) break; visited[cur] = 1; for(auto &p : g[cur]) { int next = p.first; int d = p.second; if(dist[next] > dist[cur] + d) { dist[next] = dist[cur] + d; pq.push(P(-dist[next], next)); } } } for(int i=0; i<=n; i++) { ans[i] += dist[i]; } } int idx=1, minD=INF; for(int i=1; i<=n; i++) { if(minD > ans[i]) { minD = ans[i]; idx = i; } } printf("%d\n", idx); } } | cs |
>> 더 빠른시간에 수행된 다른사람들의 코드를 보니 플로이드로 풀었다.
>> n 제한이 100이라 플로이드로 돌려도 된다고 생각했지만, 다익스트라 공부중이라 다익스트라로 품
'BOJ > Shortest Path' 카테고리의 다른 글
[1162] 도로포장 (0) | 2018.07.28 |
---|---|
[5917] 거의 최단경로 (0) | 2018.07.26 |
[10282] 해킹 (0) | 2018.07.24 |