QOJ.ac

QOJ

Limite de temps : 4 s Limite de mémoire : 1024 MB Points totaux : 100

#23947. Moottoritietullit (Highway Tolls)

Statistiques

Tehtävänanto

JOI-kuningaskunta on $N$ kaupungista koostuva kuningaskunta, ja nämä kaupungit on numeroitu $1$:stä $N$:ään. JOI-kuningaskunnassa on $M$ näitä kaupunkeja yhdistävää yksisuuntaista moottoritietä, jotka on numeroitu $1$:stä $M$:ään. Kulkemalla moottoritietä $i$ ($1 \le i \le M$) pääsee kaupungista $A_i$ kaupunkiin $B_i$, ja sen kulkemiseen kuluva aika on $L_i$.

Joka kerta, kun moottoritietä kuljetaan, peritään tietulli. Moottoritien $i$ tietulli on halvimmillaan $C_i$, mutta koska kaikki JOI-kuningaskunnan työntekijät inhoavat ylityötä, tietulli kasvaa sitä suuremmaksi, mitä kauempana aika on vertailuajankohdasta $0$. Tarkemmin sanottuna, jos kaupungista $A_i$ lähdetään ajanhetkellä $t$ ja kuljetaan moottoritietä $i$, tietulli ilmaistaan vakion $K$ avulla muodossa $C_i + K \times |t|$, missä $|t|$ tarkoittaa luvun $t$ itseisarvoa.

Asut kaupungissa $1$ ja suunnittelet matkaa kaupunkiin $N$, jossa ystäväsi asuu. Koska haluat matkustaa kaupungista $1$ kaupunkiin $N$ moottoriteitä pitkin, haluat ensin selvittää, onko se mahdollista, ja jos se on mahdollista, haluat myös selvittää, mikä on pienin mahdollinen tietullien kokonaissumma. Voit valita vapaasti matkareitin sekä lähtöajankohdat kustakin kaupungista. Erityisesti voit lähteä kaupungista $1$ negatiivisella ajanhetkellä tai viettää aikaa pysyttelemällä jossakin kaupungissa kulkematta mitään moottoritietä.

Kun moottoriteiden tiedot sekä vakio $K$ on annettu, kirjoita ohjelma, joka selvittää, onko mahdollista matkustaa kaupungista $1$ kaupunkiin $N$ moottoriteitä pitkin, ja jos se on mahdollista, etsii tietullien kokonaissumman pienimmän arvon.

Tämän tehtävän rajoitusten puitteissa voidaan todistaa, että jos kaupungista $1$ on mahdollista matkustaa kaupunkiin $N$ moottoriteitä pitkin, tietullien kokonaissumman pienin arvo on aina kokonaisluku.

Rajoitukset

  • $2 \le N \le 4\,000$.
  • $1 \le M \le 8\,000$.
  • $0 \le K \le 100\,000$.
  • $1 \le A_i \le N$ ($1 \le i \le M$).
  • $1 \le B_i \le N$ ($1 \le i \le M$).
  • $A_i \neq B_i$ ($1 \le i \le M$).
  • $1 \le L_i \le 1\,000\,000$ ($1 \le i \le M$).
  • $0 \le C_i \le 10^9$ ($1 \le i \le M$).
  • Kaikki syötteen arvot ovat kokonaislukuja.

Osatehtävät

  1. ($9$ pistettä) $N \le 100$, $M \le 200$, $K = 0$.
  2. ($21$ pistettä) $N \le 100$, $M \le 200$, $L_i \le 20$ ($1 \le i \le M$).
  3. ($13$ pistettä) $N \le 100$, $M = N - 1$, $A_i = i$, $B_i = i + 1$ ($1 \le i \le M$).
  4. ($23$ pistettä) $N \le 100$, $M \le 200$, ja seuraava rajoitus pätee:
    • $N$ on parillinen, ja $\lfloor B_i / 2 \rfloor - \lfloor A_i / 2 \rfloor = 1$ ($1 \le i \le M$), missä $\lfloor x \rfloor$ tarkoittaa suurinta kokonaislukua, joka on enintään $x$.
  5. ($16$ pistettä) $N \le 100$, $M \le 200$.
  6. ($11$ pistettä) $N \le 1\,500$, $M \le 3\,000$.
  7. ($7$ pistettä) Ei lisärajoituksia.

Syöte

Syöte annetaan seuraavassa muodossa:

N M K
A_1 B_1 L_1 C_1
A_2 B_2 L_2 C_2
:
A_M B_M L_M C_M

Tuloste

Jos kaupungista $1$ on mahdotonta matkustaa kaupunkiin $N$ moottoriteitä pitkin, tulosta -1. Jos se on mahdollista, tulosta $1$ riville kokonaisluku, joka ilmaisee tietullien kokonaissumman pienimmän arvon.

Esimerkki 1

4 4 2
1 2 3 2
1 3 1 10
2 3 1 4
3 4 5 3
15

JOI-kuningaskunnan kaupungit ja tiet on esitetty alla olevassa kuvassa. Ympyrät esittävät kaupunkeja, nuolet esittävät teitä, ja kunkin tien viereen on kirjoitettu kyseisen tien arvot $L_i$ ja $C_i$ tässä järjestyksessä. Ympyrän sisään kirjoitettu luku ilmaisee kyseisen kaupungin numeron.

problem_23947_1be471b578508932fc741bdecdff46c1.png

Kun matkustetaan seuraavasti, tietullien kokonaissummaksi tulee $15$:

  • Ajanhetki $-1$: Lähde kaupungista $1$ ja suuntaa kaupunkiin $3$. Tietullia kuluu $10 + 2 \times |-1| = 12$.
  • Ajanhetki $0$: Saavu kaupunkiin $3$ ja suuntaa välittömästi kaupunkiin $4$. Tietullia kuluu $3 + 2 \times |0| = 3$.
  • Ajanhetki $5$: Saavu kaupunkiin $4$.

Koska ei ole tapaa matkustaa siten, että tietullien kokonaissumma olisi pienempi kuin $15$, tulostetaan $15$.

Tämä esimerkkisyöte täyttää osatehtävien $2, 5, 6, 7$ rajoitukset.

Esimerkki 2

4 4 0
1 2 3 2
1 3 1 10
2 3 1 4
3 4 5 3
9

Eroaa Esimerkistä $1$ vain vakion $K$ arvon osalta.

Kun matkustetaan seuraavasti, tietullien kokonaissummaksi tulee $9$:

  • Ajanhetki $-3$: Lähde kaupungista $1$ ja suuntaa kaupunkiin $2$. Tietullia kuluu $2 + 0 \times |-3| = 2$.
  • Ajanhetki $0$: Saavu kaupunkiin $2$ ja suuntaa välittömästi kaupunkiin $3$. Tietullia kuluu $4 + 0 \times |0| = 4$.
  • Ajanhetki $1$: Saavu kaupunkiin $3$ ja jää kaupunkiin $3$.
  • Ajanhetki $3$: Lähde kaupungista $3$ ja suuntaa kaupunkiin $4$. Tietullia kuluu $3 + 0 \times |3| = 3$.
  • Ajanhetki $8$: Saavu kaupunkiin $4$.

Koska ei ole tapaa matkustaa siten, että tietullien kokonaissumma olisi pienempi kuin $9$, tulostetaan $9$.

Tämä esimerkkisyöte täyttää osatehtävien $1, 2, 5, 6, 7$ rajoitukset.

Esimerkki 3

2 1 10
2 1 4 7
-1

Koska kaupungista $1$ on mahdotonta matkustaa kaupunkiin $2$ moottoriteitä pitkin, tulostetaan -1.

Tämä esimerkkisyöte täyttää osatehtävien $2, 5, 6, 7$ rajoitukset.

Esimerkki 4

4 3 5
1 2 3 1
2 3 1 10
3 4 7 6
37

Tämä esimerkkisyöte täyttää osatehtävien $2, 3, 5, 6, 7$ rajoitukset.

Esimerkki 5

8 8 2
1 2 1 5
5 6 3 1
2 4 10 18
3 5 3 1
1 3 4 2
5 6 2 2
2 5 2 3
6 8 1 1
25

Voi olla olemassa useita teitä, joilla on sama pari $(A_i, B_i)$.

Tämä esimerkkisyöte täyttää osatehtävien $2, 4, 5, 6, 7$ rajoitukset.

Esimerkki 6

6 10 100000
4 2 212037 752027141
2 5 667097 1571491
2 1 769275 576006950
1 2 711969 526189398
5 3 733555 206320177
3 4 364807 802102091
1 4 467240 183184247
3 5 44994 15991843
5 3 613192 782356546
4 6 832593 639529758
47546714005

Tämä esimerkkisyöte täyttää osatehtävien $5, 6, 7$ rajoitukset.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.