jja08111   3년 전

밸만 포드만을 이용하여 해결했습니다. 그런데 궁금한 것이 있습니다. 

아래에 주석으로 표시된 조건문을 보시면 here이 시작 지점과 끝 지점으로 가는 경로에 있어야 음수 사이클이 경로에 있다고 판단합니다. 

 그런데  there로 하면 틀렸습니다. 를 받습니다. 어짜피 here과 there은 음수 사이클로 연결되어 있는것 아닌가요?

웃긴것은 iter내부를 아래와 같이 작성하면 통과되는 것입니다. (주석에도 달아놓았습니다.)

```cpp

for(int iter=0;itercost+upper[here])
{
// 음수 사이클 존재 여부 판단
if(iter==V-1 && reachable[start][there] && reachable[there][target])
return -LONG_MAX;
upper[there]=cost+upper[here];
}
}

```

jja08111   3년 전

반례를 찾았습니다. 

5 0 2 5

0 1 2

1 2 2

3 1 1

3 4 1

4 3 1

0 0 0 1 8

답: -4 

출력: Gee

경로에 있지 않은데 경로에 있는것으로 판단하네요 


그 이유는 20번째 줄에 있는 if(upper[here] < LONG_MAX) 이 없어서 였습니다. 

그래서 값이 무한대인 정점을 완화하여 발생한 버그였습니다. 

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