만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

빠른 실패

시간 제한4초메모리 제한2048 MB

요약
각 테스트의 실행 시간, 통과 확률, 선행 의존 관계가 주어질 때 첫 실패에서 멈추는 실행의 기대 비용이 최소가 되는 순서를 구합니다.
난이도

보통10점 중 7점

유형
그리디, 트리, 정렬
정답자
아직 제출이 없습니다

문제

대형 소프트웨어 프로젝트에는 품질을 확인하기 위한 자동화 테스트가 많이 있다. 소스 코드를 수정하면 기존 기능이 깨지지 않았는지 확인하려고 테스트들을 어떤 순서로든 모두 실행한다. 모든 테스트가 통과해야만 코드 변경이 승인된다.

테스트를 모두 실행하는 데는 비용이 많이 들므로, 테스트가 하나라도 실패하면 나머지 테스트는 실행하지 않는다. 각 테스트는 정해진 CPU 시간이 걸린다. 실패가 발생한 경우의 비용은 실행한 테스트 중 실패한 테스트까지의 CPU 시간 합이다. 모든 테스트가 통과한 경우의 비용은 00이다.

테스트는 다른 테스트 하나의 출력에 의존할 수 있다. 예를 들어 테스트 A가 테스트 B의 출력에 의존하면, B를 A보다 먼저 실행해야 한다. 둘 사이에 다른 테스트가 실행될 수도 있다.

각 테스트가 통과할 확률은 과거 데이터 분석과 이번 코드 변경에 대한 평가를 바탕으로 미리 알려져 있다. 한 테스트의 통과 여부는 다른 테스트의 통과 여부와 독립이다. 각 테스트의 CPU 시간, 각 테스트의 실패 확률, 의존 관계가 주어졌을 때, 기대 비용이 최소가 되도록 테스트를 실행할 순서를 정하라.

입력

첫째 줄에 테스트의 개수를 나타내는 정수 nn (1≤n≤1051\leq n\leq 10^5)이 주어진다.

이후 nn개의 줄에 세 값이 주어진다. 정수 cc (1≤c≤1061\leq c\leq 10^6), 실수 pp (0<p<10<p<1), 정수 dd (0≤d≤n0\leq d\leq n)이다. cc는 테스트를 실행하는 데 필요한 CPU 시간이고, pp는 테스트가 통과할 확률이며, dd는 이 테스트가 의존하는 테스트의 번호이다. 의존하는 테스트가 없으면 00이다. 테스트는 입력 순서대로 11부터 nn까지 번호가 매겨져 있다.

각 확률은 소수점 이하 여섯 자리 이하로 주어진다. 순환 의존 관계는 없다.

출력

nn개의 줄을 출력한다. 각 줄에는 정수 하나를 쓰며, 테스트를 실행할 순서대로 테스트 번호를 적는다. 이 순서의 기대 비용은 최적 기대 비용과 절대 오차 또는 상대 오차가 10−610^{-6} 이내여야 한다. 이 조건을 만족하는 순서는 모두 정답으로 인정된다.

예제1

  1. 예제 1

    입력
    4
    100 0.5 0
    200 0.1 1
    10 0.5 2
    10 0.9 0
    
    예상 출력
    4
    1
    2
    3