한 번 남았다
시간 제한2초메모리 제한512 MB
간선 가중치가 1 또는 -1인 방향 그래프에서 음수 사이클이 없는데도 N-2번만 완화한 뒤 한 번 더 확인하는 변형 벨만-포드가 음수 사이클이 있다고 잘못 판정하는 그래프를 만든다. 간선 수를 최소로 하고 사전순으로도 가장 앞서야 한다.
문제
지구이는 간선의 가중치가 또는 인 방향 그래프에 음수 사이클이 있는지 판정하려고 벨만포드 알고리즘을 다음과 같이 구현했다.
- 모든 정점 에 대하여 를 으로 초기화한다.
- 갱신 한 회차는 입력에 주어진 순서대로 모든 간선 를 훑으면서 에 를 대입하는 것이다. 간선 하나를 처리할 때마다 가 곧바로 바뀌고, 같은 회차의 다음 간선은 바뀐 값을 쓴다.
- 갱신을 회 반복한다. 원래대로라면 회여야 한다.
- 갱신을 한 회차 더 했을 때 의 값이 하나라도 바뀌면 음수 사이클이 있다고 판정한다.
3번의 반복 횟수를 하나 덜 쓴 탓에, 이 코드는 음수 사이클이 없는 그래프를 보고도 있다고 답한다. 그런 그래프를 직접 만들어서 지구이의 코드가 틀렸음을 보여라.
정점 개수 이 주어진다. 정점이 개이고 모든 간선의 가중치가 또는 인 방향 그래프 중에서, 음수 사이클이 없지만 위 코드가 음수 사이클이 있다고 판정하는 그래프를 하나 출력한다. 간선을 출력하는 순서가 곧 코드가 간선을 훑는 순서이므로, 순서도 답의 일부다.
조건을 만족하는 그래프는 여러 개다. 그중 간선 개수 이 가장 작은 것을 출력하고, 그런 그래프가 여럿이면 출력한 간선을 순서대로 처럼 늘어놓아 앞에서부터 수를 비교했을 때 사전순으로 가장 앞서는 것을 출력한다.
입력
첫째 줄에 정점 개수 이 주어진다. ()
출력
첫째 줄에 정점 개수 과 간선 개수 을 출력한다. ()
둘째 줄부터 개의 줄에 각 간선의 시작 정점 , 끝 정점 , 가중치 를 출력한다. (, , 또는 )
같은 쌍을 두 번 출력하면 안 된다.