În judeţul Constanţa se găsesc cel mult de obiective turistice dispuse pe o suprafaţă asemănătoare cu un caroiaj, format din pătrăţele având latura de kilometru. Obiectivele sunt amplasate în unele puncte de intersecţie ale caroiajului.
Două obiective se consideră vecine dacă sunt situate pe una din direcţiile Nord, Sud, Est, Vest la o distanţă de kilometru una faţă de alta.
Între anumite perechi de obiective vecine au fost construite drumuri directe, pentru a se asigura deplasarea între oricare două obiective.
Despre fiecare obiectiv avem următoarele informaţii:
- numărul asociat acestuia, care este unic şi are o valoare cuprinsă între şi numărul total al obiectivelor;
- obiectivele vecine cu care acesta este conectat prin drumuri directe (cel mult patru obiective).
Pentru fiecare două obiective care comunică se cunoaşte costul asfaltării drumului direct dintre ele.
Cerință
Scrieți un program care rezolvă următoarele cerințe:
- Se doreşte realizarea unei hărţi a judeţului în care să apară reprezentate toate obiectivele. Harta se va reprezenta sub forma unei matrice având dimensiunea maximă . Fiecare element al matricei codifică printr-o succesiune de patru cifre binare existenţa drumurilor directe care încadrează un pătrăţel din caroiaj. Dacă pe latura din nord a acestui pătrăţel există un drum direct între două obiective, atunci bitul cel mai semnificativ va fi . În caz contrar acesta va fi . Ceilalţi trei biţi corespund, în ordine, direcţiilor Sud, Est, Vest. De exemplu, dacă pentru un pătrăţel există drumuri pe laturile Nord, Sud şi Vest, cei patru biţi vor fi: , , , . Harta trebuie să aibă suprafaţă minimă dar să cuprindă toate obiectivele.
- Se doreşte asfaltarea unora dintre drumurile existente astfel încât să se poată ajunge, mergând numai pe drumuri asfaltate de la oricare obiectiv la oricare altul. Costul total al asfaltării trebuie să fie minim. Să se precizeze care dintre drumuri vor fi asfaltate.
Date de intrare
În fişierul de intrare ob.in
se află pe prima linie numărul , care reprezintă cerința care trebuie rezolvată.
Urmează un număr necunoscut de linii până la sfârșitul fișierului, fiecare fiind de forma:
NO nvN cdsN nvS cdsS nvE cdsE nvV cdsV
având semnificaţia:
NO
= număr obiectiv;nvN
= număr obiectiv vecin nord;cdsN
= cost drum spre nord;nvS
= număr obiectiv vecin sud;cdsS
= cost drum spre sud;nvE
= număr obiectiv vecin est;cdsE
= cost drum spre est;nvV
= număr obiectiv vecin vest;cdsV
= cost drum spre vest.
Dacă un anumit obiectiv nu are vecin într-o anumită direcţie, numărul vecinului din direcţia respectivă va fi înlocuit cu iar costul drumului direct dintre cele două cu .
Valorile de pe o singură linie sunt separate prin unul sau mai multe spații.
Date de ieșire
Datele de ieşire se scriu în fişierul ob.out
.
Dacă , se afișează o hartă a obiectivelor folosind numere între şi . Fiecare număr reprezintă codificarea în baza zece a celor patru cifre binare.
Dacă , se afișează pe prima linie costul optim cerut şi pe următoarele linii obiectivele între care se asfaltează drumul.
Restricții și precizări
- Numărul de obiective este cel mult .
- Harta se încadrează într-o matrice de de linii şi de coloane.
- Lungimile drumurilor directe sunt cel mult .
- Drumurile directe între obiective sunt bidirecţionale.
- Se garantează că datele de intrare nu conţin date incompatibile.
- Primele 10 teste sunt în valoare de 50 de puncte și au ; următoarele 10 teste sunt în valoare de 50 de puncte și au .
Exemplul 1
ob.in
1
1 0 0 0 0 2 3 0 0
3 6 3 0 0 0 0 2 1
6 0 0 3 3 0 0 5 2
2 5 2 0 0 3 1 1 3
4 0 0 0 0 5 3 0 0
5 0 0 2 2 6 2 4 3
ob.out
2 7 5
2 11 9
Exemplul 2
ob.in
2
1 0 0 0 0 2 3 0 0
3 6 3 0 0 0 0 2 1
6 0 0 3 3 0 0 5 2
2 5 2 0 0 3 1 1 3
4 0 0 0 0 5 3 0 0
5 0 0 2 2 6 2 4 3
ob.out
11
1 2
2 3
6 5
2 5
5 4
Explicație
Ambele exemple corespund hărții de mai jos: