간선과 약수
시간 제한1초메모리 제한2048 MB
가중치 DAG에서 라운드 i마다 간선 가중치 합이 i+1의 배수인 경로를 골라 가중 평균 점수를 최대화하는 문제입니다.
문제
시간 제한: 1000 ms. 메모리 제한: 2048 MB.
방향 비순환 그래프 에서 게임을 합니다. 시작 정점은 입니다. 규칙은 다음과 같습니다.
- 게임은 1번부터 번호가 매겨진 라운드로 진행됩니다.
- 번째 라운드에서 플레이어는 에서 시작하고 간선을 하나 이상 포함하는 경로 를 고릅니다. 이때 경로에 속한 간선 가중치의 합이 의 정확한 배수여야 합니다. 그런 경로가 없으면 플레이어는 실패하고 점수를 얻지 못합니다. 고를 수 있으면 라운드가 성공하여 끝나고, 의 끝점을 로 기록합니다.
- 라운드에 성공한 뒤 플레이어는 게임을 끝내거나 다음 라운드를 계속할 수 있습니다. 게임을 끝내면 고른 개의 경로 를 이중 경로(doubling paths)라 하고, 점수를 계산합니다.
실패하지 않았다면, 게임을 끝낼 때 고른 이중 경로 의 점수는 입니다. 여기서 는 경로 의 간선 수이고, 는 입력으로 주어진 가중치입니다. 그래프가 비순환이므로 고를 수 있는 경로는 최대 개이며, 입력에는 만 주어집니다.
그래프와 시작 정점이 주어졌을 때, 얻을 수 있는 최대 점수를 구하세요.
입력
첫 줄에 정수 , , 이 주어집니다. 각각 정점 수, 간선 수, 시작 정점 번호입니다 (; ; ).
둘째 줄에는 점수 계산에 쓰이는 개의 정수 이 주어집니다 ().
이어지는 개의 줄에는 각각 정수 , , 가 주어지며, 이는 에서 로 가는 가중치 의 유향 간선입니다 (; ; ). 그래프는 비순환이고, 방향을 무시하면 연결되어 있으며, 중복 간선은 없습니다.
출력
한 줄에 공백으로 구분된 정수 두 개를 출력합니다.
경로를 하나 이상 고를 수 있으면 최적의 선택 방법이 존재하고, 최적 점수는 서로소인 정수 , ()에 대해 로 나타낼 수 있습니다. 이 경우 와 를 출력합니다. 경로를 하나도 고를 수 없으면 -1~-1을 출력합니다.
힌트
선택된 이중 경로는 와 입니다.