해당 문제는 벨만 포드 알고리즘을 다루는 문제입니다.
벨만 포드 알고리즘도 이번에 처음 다르게 되는데 가중치가 마이너스를 사용하게 될때 사용하는 알고리즘읍니다
distance = new long[n + 1];
for (int i = 0; i <= n; i++) {
distance[i] = Integer.MAX_VALUE;
}
distance[1] = 0;
for (int i = 1; i < n; i++) {
for (City city : arr) {
if (distance[city.start] == Integer.MAX_VALUE) continue;
if (distance[city.next] > distance[city.start] + city.time) {
distance[city.next] = distance[city.start] + city.time;
}
}
}
for (City city : arr) {
if (distance[city.start] == Integer.MAX_VALUE) continue;
if (distance[city.next] > distance[city.start] + city.time) {
System.out.println(-1);
System.exit(0);
}
}
for (int i = 2; i <= n; i++) {
if (distance[i] == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(distance[i]);
}
}