Dizzy999
dizzy-theme
Dizzy999
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Machine Learning (1)
      • 논문 리뷰 (0)
      • 수학통계 이론 (1)
      • 짧은글 (0)
    • 알고리즘 (22)
      • 알고리즘 이론 (1)
      • 알고리즘 문제 (20)
      • 짧은글 (1)
    • 프로그램 (2)
      • 프로그래밍 용어 및 상식 (1)
      • C++ (1)
    • 미니프로젝트 (0)
      • Moon Tracker (0)
    • Theme (0)
      • 짧은글 (0)
    • 아두이노&라즈베리파이 (1)
      • 아두이노 (0)
      • 라즈베리파이 (1)
    • Miscellaneous (3)
      • 이과가 이해한 Color (3)
    • OpenCV (0)
      • Tutorial (0)
    • Manim (5)
      • Tutorial (5)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dizzy999

dizzy-theme

알고리즘/알고리즘 문제

[백준-1238] 파티 - Python

2021. 11. 17. 09:51

 

 

 

 

 

 

문제 소개

 

 

문제

N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다.

어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다.

각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다.

이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라.

 

사용한 알고리즘

 

더보기

다익스트라 알고리즘 적용
크게 다른건 없고 Graph가 단방향이라는것이 유의 해야하고 Dijkstra(A,X) + Dijkstra(X,A) 를 구해야 한다는것의 유의하자

 

 

 

 

 

 

Code 

 



#############################################################################
#
#############################################################################

import sys
import collections
import heapq


sys.stdin = open("input.txt", "r")

input=sys.stdin.readline

N,M,X = map(int,input().split())


graph = collections.defaultdict(list)

for _ in range(M):
    a,b,c = map(int,input().split())
    graph[a].append([b ,c])



def dijkstra(startN):
    distances_set = { node : float("inf") for node in range(1,N+1) }
    Q = []
    heapq.heappush(Q,[0,startN])
    distances_set[startN]=0

    while Q:
        cur_dist , cur_node = heapq.heappop(Q)

        if len(graph[cur_node][0])>0:
            for next_node,next_dist in graph[cur_node]:
                test_dist = next_dist+cur_dist

                if distances_set[next_node]>test_dist:
                    distances_set[next_node]=test_dist
                    heapq.heappush(Q,[test_dist,next_node])
    return distances_set




max_dist = 0
for k in range(1,N+1):
    LL = dijkstra(k)[X]+dijkstra(X)[k]
    if LL > max_dist:
        max_dist=LL

print(max_dist)

 

 

 

마무리

 

기본적인 다익스트라 적용 문제

 

※ end

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[백준-2583] 영역 구하기 - Python  (0) 2021.12.07
[백준-4485] 녹색 옷 입은 애가 젤다지? - Python  (0) 2021.11.17
[백준-2668] 숫자고르기 - Python  (0) 2021.11.12
[백준-2573] 빙산 - Python  (0) 2021.11.03
[백준-5014] 스타트링크 - Python  (0) 2021.10.15
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [백준-2583] 영역 구하기 - Python
    • [백준-4485] 녹색 옷 입은 애가 젤다지? - Python
    • [백준-2668] 숫자고르기 - Python
    • [백준-2573] 빙산 - Python
    Dizzy999
    Dizzy999

    티스토리툴바