Logistika

시간 제한15초메모리 제한1024 MB

요약
각 상점마다, 루트에서 시작해 공장 레벨이 증가하는 경로 중 상점의 레벨 범위 상품을 납품할 수 있는 마지막 공장까지의 경로 수를 10^9+7로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 동적 계획법, 누적 합
정답자
아직 제출이 없습니다

문제

Maailmakuulus tööstusfirma Universal Manufacturing otsustas hiljuti oma tegevust laiendada. Firma toodab palju erinevaid tooteid, lampidest traktoriteni, ja korraldab kogu tootmisprotsessi, toorainetest lõpliku tooteni, oma tehastes.

Firma NN tehast on nummerdatud 1…N1 \ldots N, kusjuures tehas nr. 11 on peatehas. Tehased on oma\-vahel ühendatud N−1N-1 teega ja on teada, et peatehasest on võimalik mööda neid teid pääseda kõigisse teistesse tehastesse.

Igal tehasel ii on oma tase T_iT\_i, mis tähendab et see tehas on võimeline koostama nii selle tasemega komponente teiste tehaste jaoks kui ka sama tasemega valmistooteid. Tehas võib sisendina kasutada suvalise madalama tasemega komponente, aga tulemusena saadud komponendi või toote tase on alati T_iT\_i.

Firma otsustas avada tehaste juures MM poodi, kus pood ii asub tehase C_iC\_i juuures ja võib müüa tooteid tasemetega L_i…R_iL\_i \ldots R\_i. Valmistamisel läbib iga toode mingi tehaste jada (j_1,j_2,…,j_c)(j\_1, j\_2, \ldots, j\_c), kus esialgsed komponendid valmistatakse tehases j_1j\_1, siis viiakse need tehasesse j_2j\_2, kus neist valmistatakse kõrgema taseme komponendid, mida omakorda töödeldakse edasi kuni tehaseni j_cj\_c, kus valmistatakse lõplik toode, mis transporditakse poodi. Baaskomponendid valmistatakse alati peatehases, seega j_1=1j\_1 = 1. Kuna iga tehas saab töödelda ainult madalama tasemega komponente, siis iga 1≤i<c1 \le i < c korral peab kehtima T_j_i<T_j_i+1T\_{j\_i} < T\_{j\_{i+1}}.

Kuna transport on kogu tootmisprotsessi kõige kallim osa, otsustati, et ühegi toote valmistamise käigus ei tohi toode ei komponentidena ega valmiskujul ühtki tehast korduvalt läbida (isegi kui toodet seal tehases ei töödelda). Kui mingi toote jaoks ei leidu poodi, kuhu ta nii müügile jõuda saaks, siis seda toodet poes ei müüda.

Universal Manufacturingi tööpakkumisi uurides panid Sa tähele, et neil on vaba väga hea palgaga tarkvarainseneri töökoht. Lisaks avastasid Sa, et nad kasutavad oma logistika planeerimiseks algoritmi, mis vaatab iga poe juures iga toote jaoks läbi kõik võimalikud tehaste jadad, millega seda toota saaks, ja siis valib neist selle, mis nende logistikavõrku kõige vähem koormab. Nutika programmeerijana taipasid kohe, et firma suure tehastevõrgu juures võib see algoritm joosta universumi lõpuni.

Sa soovid firmat veenda nende algoritmi ebaefektiivsuses (ja loodetavasti saada palgatud seda parandama). Selleks tuleb Sul kirjutada programm, mis arvutab iga poe jaoks, kui palju tehaste valikuid firma praegune algoritm läbi vaatab.

입력

Standardsisendi esimesel real on tehaste arv NN (1≤N≤1051 \le N \le 10^5). Teisel real on NN täisarvu P_1…P_NP\_1 \ldots P\_N (1≤P_i<i1 \le P\_i < i), kus P_iP\_i tähendab, et tehaste ii ja P_iP\_i vahel on tee (erandina P_1=0P\_1 = 0 ja ei esita teed). Kolmandal real on NN täisarvu T_1…T_NT\_1 \ldots T\_N (0≤T_i<N0 \le T\_i < N), mis näitavad tehaste tasemeid. On teada, et T_1=0T\_1 = 0 ja et kõik T_iT\_i väärtused on erinevad. Neljandal real on poodide arv MM (1≤M≤1051 \le M \le 10^5). Viimasel MM real on igaühel kolm täisarvu C_iC\_i, L_iL\_i ja R_iR\_i (1≤C_i≤N1 \le C\_i \le N ja 0≤L_i≤R_i<N0 \le L\_i \le R\_i < N), mis tähistavad et pood ii asub tehase C_iC\_i juures ja võib müüa tooteid tasemetega L_i…R_iL\_i \ldots R\_i.

출력

Standardväljundi reale ii väljastada poele ii sobivate tootedete kõigile võimalikele tootmisprotsessidele vastavate tehasejadade koguarv. Kuna variante võib olla väga palju, väljastada tegeliku arvu asemel jääk, mis tekib selle jagamisel arvuga 109+710^9+7.

예제1

  1. 예제 1

    입력
    8
    0 1 2 2 4 2 1 7
    0 7 5 1 3 6 4 2
    4
    5 1 4
    8 2 4
    6 1 4
    2 1 7
    
    예상 출력
    3
    2
    0
    1