Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Problema oli 2008  (Citit de 1220 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« : 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
« Ultima modificare: Februarie 19, 2010, 12:39:52 de către alexandru » Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #1 : 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. În exemplu, D[2] =  2, deci răspunsul este 2*15 + 180 = 210.
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #2 : Februarie 19, 2010, 13:03:33 »

Multumesc foarte mult ! Very Happy
Memorat
chera_lary
De-al casei
***

Karma: -2
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« Răspunde #3 : Februarie 19, 2010, 14:04:17 »

Ca sa calculezi distanta dintre oricare 2 noduri faci un Roy-Floyd Tongue!
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!
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #4 : Februarie 19, 2010, 14:35:05 »

Tot mai usor e un Bellman-Ford sau un simplu Bfs Tongue
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines