lucian0910   4년 전

처음에 문제를 잘못 이해해서 무조건 1번 도시를 출발점이라고 생각하고 아래와 같이 문제를 풀어서 성공이 떴습니다. 그런데 생각해보니 이 그래프가 연결 그래프라는 언급이 전혀 없으므로 컴포넌트가 여러개 이상일 수도 있는데, 그렇게 되면

1

5 1 3

1 2 3

3 4 1

4 5 1

5 3 1

위 케이스를 넣을 시 원래대로라면 3-4-5번 도시가 음수 사이클이므로 YES가 떠야 하는데 아래 코드에서는 1-2번 도시는 음수 사이클이 아니므로 NO가 뜹니다. 이 부분에 대해서 연결그래프라고 확실히 언급하거나 케이스를 추가해야 될 것으로 보입니다.

jh05013   4년 전

간선에 방향이 있으므로 연결 그래프라고 하는 것은 의미가 없고, 데이터를 추가하는 것이 좋겠습니다.

pf7   4년 전

동의합니다.

한 가지 특정 시작점에서만 벨만 포드 알고리즘을 적용하면 그 시작점에서 도달할 수 없는 경우를 고려하지 않은 소스도 맞은 것으로 나옵니다.

채점 테스트 케이스를 추가해야 합니다.

반례)
1
6 5 1
1 2 3
2 3 3
1 3 3
4 6 1
5 6 1
4 5 3

1번을 시작점으로 1회 벨만 포드 알고리즘 적용한 경우 : NO
모든 가능한 시작점을 고려한 경우 : YES

manybirds   4년 전

연결 그래프가 아닌 경우를 고려해 pypy3로 해결했을때 O(TNM) 해답 이외에는 생각나지 않아서 시간 초과가 발생했는데, 

혹시 O(NM)으로 해결 가능한 문제인가요? C나 C++로는 물론 O(TNM)도 가능하지 싶습니다만. 

bgoodsamari   4년 전

@manybirds

edge들 탐색할때 inf인경우도 다 탐색해버리면, 시작노드와 연결되어있진 않지만 음의 사이클이 존재하면 update되니까 가능하지 않나요??

danbi2990   3년 전

@manybirds

배열 초기화할 때 inf가 아닌 sys.maxsize (혹은 큰 숫자)로 하면 처음 비교할 때 if 문에서 통과되므로 O(NM)으로 가능하네요.

다만 이 경우 시작점에서 분리된 그래프의 음수 싸이클을 찾을 수 있는 장점이 있지만 시작점에서 최단거리를 찾을 수 있는 기능이 사라진다고 볼 수 있겠네요.

댓글을 작성하려면 로그인해야 합니다.