Matematická olympiáda – kategorie P

Zadání úloh ústředního kola (2. soutěžní den) 47. ročníku

P-III-4 Tunely

V jisté hornaté zemi mají N měst označených čísly od 1 do N. Mezi městy je vybudována silniční síť. Každá silnice spojuje vždy dvojici měst a je známa maximální povolená výška vozidla, jaké může po ní projet. Vzhledem k hornatosti krajiny je totiž většina silnic zčásti vedena dosti nízkými tunely proraženými ve skalách. Mezi některými dvojicemi měst přímá silnice nevede, některé dvojice měst mohou být naopak spojeny více silnicemi s různými omezeními maximální povolené výšky. Všechny silnice jsou obousměrné.

Napište program, který určí maximální možnou výšku vozidla, jaké může po existujících silnicích přejet z města X do města Y. Pro takto vysoké vozidlo dále určete trasu, po níž má z města X do města Y jet. Pokud existuje více možných tras, zvolte z nich tu, která prochází co nejméně městy (je-li více takových tras stejných vlastností, vyberte jednu libovolnou z nich).

Vstupní soubor TUNELY.IN obsahuje na prvním řádku tři celá čísla. První z nich udává počet měst N, N <= 100, druhým je číslo výchozího města X a třetím číslo cílového města Y. Na dalších řádcích souboru jsou uloženy informace o jednotlivých silnicích. Každý řádek je tvořen třemi čísly popisujícími jednu silnici: první dvě z nich jsou čísla měst, mezi nimiž silnice vede, třetí udává maximální povolenou výšku vozidla v milimetrech (celé číslo z rozmezí od 1 do 10000). Je-li třetí hodnota na řádku 0, znamená to, že výška vozidel na této silnici není omezena. Vstupní soubor je ukončen řádkem obsahujícím tři nuly.

Na prvním řádku výstupního souboru TUNELY.OUT bude zapsáno jediné číslo - nalezená maximální výška vozidla, příp. 0, existuje-li trasa z X do Y bez omezení výšky vozidla. Na druhém řádku je vypsána stanovená trasa vozidla ve tvaru posloupnosti čísel měst počínaje X a konče Y. Jednotlivá čísla jsou oddělena mezerami. Pokud cesta z města X do města Y neexistuje, obsahuje výstupní soubor jediný řádek s číslem -1.

Příklad vstupního a jemu odpovídajícího výstupního souboru

TUNELY.IN

6 5 3 1 2 0 1 4 0 1 5 2000 2 4 5000 2 5 3300 2 6 0 3 4 2400 3 6 2200 4 6 6000 0 0 0

TUNELY.OUT

2400 5 2 4 3

P-III-5 Zloděj

Zloděj se při své noční výpravě vloupal do bytu a našel tam několik předmětů, které by si rád odnesl. Může si z nich ale odnést jen tolik, kolik unese. Přitom se samozřejmě snaží, aby měl jeho úlovek co nejvyšší cenu. Napište program, který zlodějovi pomůže v rozhodování, které předměty si má odnést.

Je dán počet nalezených předmětů, známe hmotnost a cenu a každého předmětu. Dále je dána maximální celková hmotnost předmětů M, jakou zloděj unese. Určete, které předměty si má zloděj vybrat, aby měly dohromady co nejvyšší cenu a přitom aby jejich souhrnná hmotnost nepřevýšila M. Pokud lze této nejvyšší ceny dosáhnout více různými výběry, zvolte z nich ten s nejnižší souhrnnou hmotností vybraných předmětů (z více různých takových výběrů již zvolte jeden libovolný).

Ve vstupním souboru ZLODEJ.IN jsou na prvním řádku uvedena dvě kladná celá čísla - počet předmětů N, N <= 250, a maximální celková hmotnost vybraných předmětů v gramech M, M <= 10000. Na každém z dalších N řádků je popsán jeden předmět: řádek obsahuje vždy dvě kladná celá čísla - hmotnost předmětu v gramech (nejvýše 10000) a cenu v korunách (nejvýše 50000).

Do výstupního souboru ZLODEJ.OUT program zapíše dva řádky. První z nich bude obsahovat dvě celá čísla oddělená mezerou, která udávají souhrnnou hmotnost a celkovou cenu všech vybraných předmětů. Na druhém řádku jsou uvedena pořadová čísla všech vybraných předmětů oddělená mezerami (předměty jsou očíslovány od 1 do N v tom pořadí, jak jsou uvedeny na vstupu).

Příklad vstupního a jemu odpovídajícího výstupního souboru

ZLODEJ.IN

8 3500 1000 20000 800 15000 3000 30000 1500 40000 1000 10000 2000 15000 8000 50000 1400 30000

ZLODEJ.OUT

3300 75000 1 2 4