PRAMEN.PAS
/ PRAMEN.CPP
PRAMEN.IN
PRAMEN.OUT
Správce tedy nechal vyrobit N směrovek s čísly pramenů 1,...,N. Dělníci ale příliš nepřemýšleli a rozmístili směrovky k pramenům úplně náhodně. Tak se stalo, že u každého pramene sice byla umístěna právě jedna směrovka ukazující k nějakému prameni, ale mohlo se stát, že pokud vyšel turista od některého pramene, tak se k některým jiným pramenům vůbec nedostal. Mohlo se dokonce stát, že směrovka u některého pramene ukazovala nazpět na ten samý pramen, u kterého byla umístěna.
Správce ví, že na dělníky se může spolehnout jen v této jednoduché operaci: vzájemně zaměnit směrovky u dvou pevně daných pramenů p a q, tzn. jestliže směrovka u pramene p ukazovala na pramen i a směrovka u pramene q ukazovala na pramen j, tak po této výměně bude u pramene p směrovka ukazovat na pramen j a u pramene q bude směrovka ukazovat na pramen i.
Napište program pro správce lázní, který zjistí, jaké výměny směrovek mají dělníci provést, aby bylo možné podle směrovek obejít všechny prameny a aby přitom počet provedených výměn byl nejmenší možný.
PRAMEN.IN
obsahuje na prvním řádku počet
pramenů N (1<=N<=30000). Následuje N čísel
(oddělených mezerami nebo konci řádků), přičemž i-tým z nich je
číslo pramene, na který ukazuje směrovka umístěná u i-tého
pramenu.
PRAMEN.OUT
obsahuje
minimální počet výměn M, které je třeba provést. Následuje M
řádků popisujících jednotlivé výměny: (i+1)-tý řádek výstupního
souboru (1<=i<=N) obsahuje dvě čísla p, q oddělená
jednou mezerou, označující dvojici pramenů, u nichž je třeba
vyměnit směrovky. Výměny se provádějí v uvedeném pořadí.
PRAMEN.IN
PRAMEN.OUT
P-III-5 Kina
Program: KINA.PAS
/ KINA.CPP
Vstup: KINA.IN
Výstup: KINA.OUT
V jisté zemi právě začal Mezinárodní Filmový Festival Umělecké
Kinematografie (MFF UK). V zemi je n (1<=n<=50) měst
označených čísly 1,2,...,n. V každém městě je jedno kino.
O každém kině je známo, který film z nabídky filmů MFF UK
očíslovaných 1,2,...,t (1<=t<=n) v něm promítají.
Konkrétně, v kině ve městě číslo i promítají každý večer stejný
film číslo fi. Města jsou navzájem pospojována m
obousměrnými cestami. Pro každou cestu c (1<=c<=m)
známe čísla měst zc a kc (zc<>kc), která tato cesta
spojuje, a také známe její délku lc (0<=lc<=1000).
Mezi každou dvojicí měst vede nejvýše jedna cesta.
Předpokládejme, že máte rozpis k večerů (0<=k<=1000), přičemž pro každý večer i (1<=i<=k) je stanoveno číslo filmu pi, který byste chtěli v ten večer vidět. Některé filmy se v rozpisu mohou vyskytnout i vícekrát. Abyste mohli večer sledovat naplánovaný film, musíte se během dne dopravit do některého města (nezáleží na tom do kterého), v němž tento film uvádějí. Protože neradi cestujete, chtěli byste, aby celková vámi procestovaná vzdálenost byla co nejmenší. První den ráno se nacházíte ve městě číslo 1. Při přejíždění z města do města je možné projíždět přes libovolná jiná města. Z každého města se lze dostat do každého a přeprava se stihne vždy za jeden den. Nezáleží na tom, ve kterém městě zůstanete po shlédnutí posledního filmu.
Napište program, který pro každé město přečte číslo promítaného filmu, dále načte popis jednotlivých cest a rozpis filmů, které chcete v jednotlivých dnech vidět, a vypíše, ve kterém městě máte jít který večer do kina, aby vámi procestovaná dráha byla minimální. Dále vypíše délku této minimální trasy.
KINA.IN
obsahuje na prvním řádku tři čísla
n,m,k. Druhý řádek obsahuje n čísel f1,f2,...,fn.
Následuje m řádků popisujících cesty, každý z nich obsahuje
trojici čísel zc,kc,lc. Poslední řádek obsahuje k čísel
p1,p2,...,pk. Každá dvojice po sobě následujících čísel
v řádku je oddělena jednou mezerou. Můžete předpokládat, že každý
film pi (1<=i<=k), který chcete vidět, se promítá
alespoň v jednom městě.
KINA.OUT
obsahuje na prvním řádku délku
celkově procestované dráhy mezi městy. Druhý řádek popisuje jednu
optimální trasu. Obsahuje k čísel (každá dvě po sobě jdoucí
čísla jsou oddělena mezerou), i-té číslo v pořadí označuje
město, v němž byste podle zvolené trasy měli vidět film pi.Poznámka: Jestliže výstupní soubor obsahuje správnou minimální délku, ale buď neobsahuje žádný popis optimální trasy, nebo obsahuje popis trasy, který je chybný, bude řešení hodnoceno jako částečně správné a získá pro daný vstup poloviční počet bodů.
KINA.IN
KINA.OUT