infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: alexandru din Februarie 19, 2010, 12:30:02



Titlul: Problema oli 2008
Scris de: alexandru din Februarie 19, 2010, 12:30:02
Buna, am urmatoare problema
Citat
Atunci când cineva trimite un mesaj, ceva misterios şi fascinant este transmis mai departe. Să zicem că Winettou vrea să transmită mesajul "Dansul Norilor, războiul s-a terminat. Winettou". Mai întâi îl dictează unui prieten, acesta aprinde un foc şi trimite acelaşi mesaj ca un tipar de semnale cu fum.  Dansul Norilor aflat la kilometri distanţă, se uită pe cer şi recepţionează exact acelaşi mesaj care îi fusese adresat.
   Înainte de-a fi cuceriţi, de europeni , indienii  trăiau pe suprafeţe foarte întinse şi foloseau acest minunat mod de-a comunica încă din timpuri străvechi. Un lucru extraordinar,  dacă trebuiau să retransmită mesajul mai departe nu-l modificau în niciun fel.
   Înţeleptii organizează întâlnirea anuală a indienilor pentru a-şi celebra zeul. Se întâlnesc, într-un anumit loc dinainte ales,  împreună cu câteva căpetenii de trib la "pipa pacii" şi hotărăsc data acestui important eveniment, în funcţie de astre şi de alte lucruri ştiute doar de ei. Căpeteniile se întorc, mergând fiecare 3 ore,  în ţinuturile lor. Odată ajunşi transmit după 10 minute mesajul folosind, bineînţeles,  fumul.  Mesajul este transmis  continuu fie zi, fie noapte. Din momentul în care o căpetenie de trib primeşte prima dată semnalul,  îl retransmite mai departe după 10 minute de la primire. Timpul de transmitere/descifrare a unui mesaj este de 5 minute.  Ştiind că numele indienilor este o poveste de viaţă, complicat pentru noi, ne vedem "nevoiţi"  să-l înlocuim printr-un număr. Mai este ceva, fumul poate fi văzut doar între anumite ţinuturi.

Cerinţă
Scrieţi un program care să calculeze timpul minim, în minute,  necesar pentru ca toate căpeteniile să fi primit mesajul.  Dacă nu se poate acest lucru atunci calculaţi câte căpetenii de trib nu au fost anunţate.
Exempu
8
2 //numarul de capeteni care au fost la intalnire
3 6 //capetenile care au fost la intalnire
1 2 //restul grafului...
1 3
1 6
2 4
3 4
3 5
3 6
6 7
6 8
7 8
raspuns: 210
Imi poate da cineva un hint  cum sa rezolv problema, sau macar sa-mi explice exemplu nu-mi dau seama cum a ajuns la rezultatul 210


Titlul: Răspuns: Problema oli 2008
Scris de: Andrei Misarca din Februarie 19, 2010, 12:54:23
Dacă am înțeles eu bine problema treaba stă cam așa: Durata de transmitere a mesajului este de 15 minute între 2 noduri, iar răspunsul cerut este max(D[ i ] | i nod în graf)*15 + 180, unde D[ i ] este distanța către cea mai apropiată căpetenie. Pentru a calcula D[ i ] faci un Dijkstra/Belman-Ford, pornind din mai multe noduri, ca la Cătun (http://www.infoarena.ro/problema/catun). În exemplu, D[2] =  2, deci răspunsul este 2*15 + 180 = 210.


Titlul: Răspuns: Problema oli 2008
Scris de: alexandru din Februarie 19, 2010, 13:03:33
Multumesc foarte mult ! :D


Titlul: Răspuns: Problema oli 2008
Scris de: CHERA Laurentiu din Februarie 19, 2010, 14:04:17
Ca sa calculezi distanta dintre oricare 2 noduri faci un Roy-Floyd :P!
Problema lui ar fi ca are o complexitate mare atat de timp cat si de spatiu, dar cred ca la Oli ar merge destul de bine pe langa faptul ca este si mai usor de implementat!


Titlul: Răspuns: Problema oli 2008
Scris de: alexandru din Februarie 19, 2010, 14:35:05
Tot mai usor e un Bellman-Ford sau un simplu Bfs :P