2019.03.14) 백준 최단경로 특집 3편 - 1504, 2606(PyPy3)
2019. 3. 14. 13:38ㆍ프로그래밍(주력)/백준 문제풀이
컴퓨터를 바꿨더니 깃이 꼬였다..... 망할
1504번
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 | from heapq import heappop, heappush INF = 1e9 N, E = map(int, input().split(' ')) graph = {i: dict() for i in range(1, N + 1)} for i in range(E): a, b, c = map(int, input().split(' ')) if graph[a].get(b, False): graph[a][b] = min(c, graph[a][b]) else: graph[a][b] = c if graph[b].get(a, False): graph[b][a] = min(c, graph[b][a]) else: graph[b][a] = c m1, m2 = map(int, input().split(' ')) # 우선순위 큐 탐색 구현 def hq_search(start, end): # 자기로 가는건 무조건 0 if start == end: return 0 check = {i: INF for i in range(1, N + 1)} hq = list() heappush(hq, (0, start)) while hq: w, now = heappop(hq) if now == end: break if check[now] < w: continue for nxt in graph[now].keys(): w2 = graph[now][nxt] + w if w2 < check[nxt]: check[nxt] = w2 heappush(hq, (w2, nxt)) return check[end] # 시작 -> 거치는곳1 -> 거치는곳2 -> 마지막 과 # 시작 -> 거치는곳2 -> 거치는곳1 -> 마지막 을 비교해서 # 작은쪽을 출력하고, 경우의수가 없어서 INF먹어버린 경우는 -1 출력 re = min(hq_search(1, m1) + hq_search(m1, m2) + hq_search(m2, N), hq_search(1, m2) + hq_search(m2, m1) + hq_search(m1, N)) print(-1 if re >= INF else re) | cs |
2606번
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 | N = int(input()) M = int(input()) graph = {i: list() for i in range(1, N + 1)} for _ in range(M): a, b = map(int, input().split(' ')) # 양방향임 이거때문에 몇번 재채점함 graph[a].append(b) graph[b].append(a) check = {i: False for i in range(1, N + 1)} # bfs 구현 이게 왜 최단거리? # 플로이드 와샬 쓰면 n^3인데.. q = [1] count = 0 while q: now = q.pop(0) if check[now]: continue check[now] = True if now != 1: count += 1 for i in graph[now]: if not check[i]: q.append(i) print(count) | cs |
'프로그래밍(주력) > 백준 문제풀이' 카테고리의 다른 글
2019.03.16) 백준 최단경로 특집 5편 - 10159(PyPy3) (0) | 2019.03.16 |
---|---|
2019.03.15) 백준 최단경로 특집 4편 - 1238, 1389, 11403(PyPy3) (0) | 2019.03.15 |
2019.03.13) 백준 최단경로 특집 2편 - 11404, 1916(PyPy3) (0) | 2019.03.13 |
2019.03.12) 백준 최단경로 특집 1편 - 1753(PyPy3) (0) | 2019.03.12 |
2019.03.11) 백준 dfs 특집 3편 - 11724, 2468(PyPy3) (0) | 2019.03.11 |