티스토리 뷰
728x90
반응형
문제 요약
- 알고리즘 분류: 트리
- 난이도: Gold3
- 문제내용:
- 도로는 방향이 없고 웜홀은 방향이 있다.
- 웜홀로 이동하면 시간은 거꾸로 흘러 간다.
- 자기 자신으로 돌아 올때 거꾸로 흘러 가는지 출력해라.
- 사이트: https://www.acmicpc.net/problem/1865
문제풀이
이번에는 문제 유형은 벨만-포드 알고리즘이다. 벨만-포드 알고리즘에 대한 자세한 설명은 여기에서 보면된다.
기본적으로 벨만-포드 알고리즘 지식과 구현 하면되기 때문에 자세한 설명은 생략한다. 다만 주위해야할점은 간선이 다리는 방향이 없어서 S → E, E → S 둘다 포함 시켜야 하고 거리를 선언할때 시작점을 초기화 없이 진행 하면된다.
Code
Python
여기서 INF 설정할때 무한(float('inf'))으로 하면 거리를 비교 할수가 없다.
import sys
input = sys.stdin.readline
INF = 1e9
def Bellman_Ford():
distances = [INF] * (N + 1)
# 라운드 마다 진행
for i in range(N):
# 각 간선
for j in range(len(edges)):
current_node, next_node, cost = edges[j]
if distances[next_node] > distances[current_node] + cost:
distances[next_node] = distances[current_node] + cost
# n번째 라운드에서도 값이 갱신된다면 음수 순환이 존재
if i == N - 1: return True
return False
for _ in range(int(input())):
N, M, W = map(int, input().split())
edges = []
for _ in range(M):
S, E, T = map(int, input().split())
edges.append((S, E, T))
edges.append((E, S, T))
for _ in range(W):
S, E, T = map(int, input().split())
edges.append((S, E, -T))
print('YES' if Bellman_Ford() else 'NO')
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[BAEKJOON]15663 N과 M (9) (0) | 2023.01.05 |
---|---|
[BAEKJOON]15657 N과 M (8) (0) | 2023.01.04 |
[BAEKJOON]2263 트리의 순회- Python (0) | 2023.01.02 |
[BAEKJOON]1918 후위 표기식 - Python (0) | 2022.12.29 |
[BAEKJOON]1167 트리의 지름 - Python (0) | 2022.12.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 배열
- 넓이 우선 탐색
- 구현
- JSCODE
- Greedy
- 그래프
- 이론
- 파이썬
- Python
- BFS
- DFS
- 알고리즘
- 그리디
- level2
- 동적계획법
- 백준
- 자바
- Programmerse
- java
- 재귀호출
- 백트레킹
- LeetCode
- 누적합
- spring-boot
- BaekJoon
- 수학
- 조합
- 문자열
- 동적 계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함