1504 특정한 최단 경로 python

    https://www.acmicpc.net/problem/1504

     

    1504번: 특정한 최단 경로

    첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존

    www.acmicpc.net

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    문제 접근

    다익스트라 알고리즘

    특정한 두 경로를 무조건 지나가야한다.

    가까운 경로를 먼저 지나려고 한다면 이런 반례가 있다.

    1에서 4까지 가는데 특정한 경로 2,3을 지나야한다고 하면,

    1->3으로 갔다가 3->2로 이동하고 다시 2->4로 이동하는데 더 멀리 둘러가게된다.

     

    결론은 v1, v2중 어딜 먼저 가야할지 정해두고 풀 수가 없다.

    그래서 v1을 먼저가는 경우와 v2를 먼저가는 경우 둘 다 구해야 한다.

     

     

    그리고 78%에서 틀리는 경우는 출력의 -1을 무시했기 때문.

    그러한 경로가 없을 때에는 -1을 출력한다.

    1번 틀렸다ㅜㅜ

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    코드

    import heapq
    import sys
    input = sys.stdin.readline
    
    """
    
    
    """
    
    N, E = map(int,input().split())
    graph = [[] for i in range(N+1)]
    for i in range(E):
        a, b, c = map(int,input().split())
        graph[a].append((c, b))
        graph[b].append((c, a))
    v1, v2 = map(int,input().split())
    
    def dijkstra(start):
        heap = [(0, start)]
        INF = float('inf')
        dp = [INF] * (N+1)
        dp[start] = 0
    
        while heap:
            w1, s = heapq.heappop(heap)
    
            if dp[s] < w1:
                continue
    
            for w2, e in graph[s]:
                if w1 + w2 < dp[e]:
                    dp[e] = w1 + w2
                    heapq.heappush(heap, (w1 + w2, e))
        
        return dp
    
    ans1 = dijkstra(1)
    ans2 = dijkstra(v1)
    ans3 = dijkstra(v2)
    ans = min(ans1[v1] + ans2[v2] + ans3[N], ans1[v2] + ans3[v1] + ans2[N])
    print(ans if ans<float('inf') else -1)
    64248 392

    '백준 > 문제풀이_python' 카테고리의 다른 글

    12851 숨바꼭질2 python  (0) 2023.01.09
    11779 최소비용 구하기 2 python  (0) 2023.01.09
    1967 트리의 지름 python  (0) 2023.01.07
    11724 연결 요소의 개수 python  (0) 2023.01.07
    11866 요세푸스 문제 0 python  (0) 2023.01.07

    댓글