무역 경로
시간 제한2초메모리 제한1024 MB
각 도시가 지나는 무역 경로 수가 제한을 넘지 않도록 로마로 가는 경로를 골라, 가치 합의 최댓값을 구합니다.
문제
모든 길은 로마로 통한다. 여기서 로마 제국 도로망의 모든 도로는 한 방향으로만 지날 수 있다. 로마가 아닌 각 도시에서는 나가는 도로가 정확히 하나 있으며, 이 도로들을 따라가면 항상 로마에 도달한다.
로마를 포함한 각 도시는 로마로 가는 무역 경로를 만들어 로마에 가치를 가져다줄 수 있다. 이 가치들은 모두 서로 다르다. 각 도시는 상인들로 너무 붐비는 것을 원하지 않아서, 자신이 포함될 수 있는 무역 경로의 개수를 제한한다.
도시가 무역 경로에 포함된다는 것은, 그 경로를 만든 도시에서 로마까지 가는 유일한 경로 위에 그 도시가 있다는 뜻이다. 도시는 자기 자신이 만든 무역 경로에도 포함된다.
도시별 제한이 주어졌을 때, 무역 경로를 만들 도시들의 부분집합을 골라 로마가 얻을 수 있는 가치의 최댓값을 구하라.
입력
첫 줄에 도시의 개수 ()이 주어진다. 도시는 1번부터 번까지 번호가 붙어 있으며, 로마는 1번 도시다.
둘째 줄에는 개의 정수 ()이 주어진다. 는 도시 에서 나가는 유일한 도로를 따라갔을 때 도착하는 도시다.
셋째 줄에는 개의 정수 ()이 주어진다. 는 도시 가 포함될 수 있는 무역 경로의 최대 개수다.
넷째 줄에는 서로 다른 개의 정수 ()이 주어진다. 는 도시 가 무역 경로를 만들었을 때 로마에 가져다주는 가치다.
출력
로마가 유효한 무역 경로들의 부분집합으로부터 받을 수 있는 가치의 최댓값을 첫 줄에 출력한다. 다음 줄에는 만든 무역 경로의 수 를 출력하고, 이어서 선택된 개의 도시를 오름차순으로 출력한다. 답이 여러 가지라면 그중 아무거나 출력해도 된다.