Baraj I
Problema 2
Patrule
Pentru a asigura linistea pe toata durata desfasurarii Olimpiadei Nationale in
orasul Oradea, Inspectoratul Local de Politie a hotarat sa instituie patrule
care sa asigure protectia tuturor obiectivelor din oras. Fiecare patrula, avand
la dispozitie o masina, urmeaza sa "acopere" doua sau mai multe obiective,
intre care politistii patrulei se vor deplasa continuu, formand un circuit.
Pentru a nu alarma cetatenii, prin fiecare obiectiv va trece doar o patrula si
doar o singura data pe parcursul fiecarui circuit. Inspectoratul dispune de
suficiente masini si oameni, principala problema fiind carburantul. De aceea
sunteti rugati ca, fiind date distantele dintre obiectivele din oras, sa
ajutati Inspectoratul sa gaseasca un mod de organizare a patrulelor astfel
incat suma totala a distantelor parcurse de acestea sa fie minima. Prin
distanta de la un obiectiv la altul se intelege lungimea (pozitiva) a traseului
ce trebuie parcurs de patrula pentru a se deplasa de la primul obiectiv la al
doilea; se presupune ca un astfel de traseu nu trece prin nici un alt
obiectiv.
Precizari:
- Nu este obligatoriu sa existe un traseu direct (care sa nu treaca prin nici
un alt obiectiv) intre oricare doua obiective. Pentru doua obiective care nu
sunt legate printr-un traseu direct, distanta dintre ele este data ca 0.
- Īn oras pot exista strazi cu sens unic, deci nu este obligatoriu ca distanta
intre doua obiective sa fie aceeasi in ambele sensuri; mai mult, este posibil
ca numai intr-un sens sa existe traseu direct.
- Desi in mod normal reteaua de strazi a orasului asigura existenta unui drum
(direct sau indirect) intre oricare doua obiective, in orice sens, datorita
lucrarilor de intretinere si extindere in desfasurare, este posibil sa existe
obiective intre care nu se poate ajunge (direct sau trecand prin alte
obiective).
- Este obligatoriu ca in solutie sa fie "acoperite" toate obiectivele din
oras.
- Este posibil si sa nu existe nici o solutie.
- Īn caz ca exista mai multe solutii optime, se cere una singura.
Intrare:
Īn fisierul de intrare PATRULE.IN se gaseste un singur set de date,
structurat astfel:
N - numarul de obiective din oras (1 <= N <= 50)
d11 d12 ... d1N - distantele (orientate) intre
oricare doua obiective
d21 d22 ... d2N - separate printr-un spatiu.
Distantele sunt intregi din
.................... intervalul [ 0, 500],o distanta egala cu 0 insemnand
dN1 dN2 ... dNN ca nu exista drum direct intre
obiectivele respective
Iesire:
Fisierul de iesire PATRULE.OUT va contine pe prima linie costul minim al
unei organizari a patrulelor, iar restul liniilor vor contine descrierea uneia
dintre organizarile optime, astfel: a doua linie va contine numarul de patrule,
iar fiecare dintre restul de linii va descrie o patrula, prin obiectivele (in
ordinea in care apar ele in circuit) parcurse de aceasta. Īn cazul in care nu
exista solutie, fisierul de iesire va contine doar un 0.
Exemplu:
PATRULE.IN:
5
0 2 0 1 3
4 0 1 0 1
2 1 0 3 6
3 0 0 0 0
2 1 1 4 0
PATRULE.OUT:
7
2
1 4
2 5 3
Timp de executie: maxim 5 secunde/test.
Punctaj maxim: 50 puncte.