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