Pagini: 1 2 [3] 4   În jos
  Imprimă  
Ajutor Subiect: 032 Flux maxim  (Citit de 38636 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
darkseeker
De-al casei
***

Karma: 29
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« Răspunde #50 : August 04, 2012, 17:15:26 »

Pentru 100 de pct este necesara optimizarea prezentata in indicatiile de rezolvare.
« Ultima modificare: August 04, 2012, 18:22:07 de către Boaca Cosmin » Memorat
test9
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #51 : August 04, 2012, 18:40:18 »

Gata, am luat 100 cu Edmonds-Karp, multumesc de ajutor
@cosmin, eu am facut indicatia aia prima oara in felul in care am inteles-o (gresit se pare), am facut un DFs la care nu reluam de fiecare data lantul de la inceput. Chestia e ca m-am bazat pe faptul ca atunci cand modifici un lant se modifica si o muchie (fluxul din ea devine maxim, si n-o sa mai fie nevoie s-o mai iei inca o data), dar uite ca pe unele teste nu e asa ..
Memorat
ctlin04
Nu mai tace
*****

Karma: 23
Deconectat Deconectat

Mesaje: 207



Vezi Profilul
« Răspunde #52 : August 08, 2012, 19:09:08 »

Ma ajuta cineva si pe mine sa iau 100 la problema asta, daca am inteles bine acea optimizare atunci cred ca am facut-o, dar tot nu pot lua mai mult de 70  Brick wall http://infoarena.ro/job_detail/775701. Va rog uitativa cineva pe sursa mea si spuneti-mi daca am implimentat corect optimizarea si daca nu va rog explicati-mi printr-un exemplu in ce consta aceasta optimizare pentru 100 de puncte  sad
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #53 : Octombrie 16, 2012, 14:11:04 »

Salut!
Daca determin ponderea taieturii minime cu ajutorul algoritmului de flux, cum pot sa gasesc si cele doua multimi, V1 si V2? Multumesc!
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #54 : Octombrie 16, 2012, 14:32:54 »

Faci un DFS din sursa pe muchiile nesaturate. Nodurile pe care le vizitezi fac parte din prima multime.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #55 : Martie 12, 2013, 13:48:45 »

http://www.cs.tufts.edu/comp/260/lect2-11.pdf Demonstratia complexitatii la edmonds karp
Memorat
AlexandruValeanu
Vorbaret
****

Karma: 29
Deconectat Deconectat

Mesaje: 167



Vezi Profilul
« Răspunde #56 : August 14, 2013, 21:51:09 »

Am si eu o nelamurire: optimizarea pentru 100p nu e de fapt algoritmul lui Dinic?
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #57 : August 15, 2013, 05:43:02 »

E prost articolul de pe infoarena legat de flux. Algoritmul lui Dinic nu e acela, se bazeaza pe alt principiu.
Memorat
CosminRusu
De-al casei
***

Karma: 77
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #58 : Decembrie 18, 2013, 11:56:16 »

Se pare ca in 2012 s-a descoperit un nou algoritm de flux maxim, mult mai rapid, cu o complexitate de aproximativ O ( N * M ).

Pentru cei interesati algoritmul este descris aici

Sursa : Quora.com
Memorat
manutruta
Strain


Karma: 5
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #59 : Martie 29, 2014, 17:29:34 »

Salutare !

Am si eu o interbare: Cum ar fi algoritmul de flux pentru un graf neorientat ?

Multumesc anticipat.
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #60 : Martie 29, 2014, 18:06:29 »

Este la fel ca cel într-un graf orientat, doar ca în graful rezidual apare și muchia x->y și y->x de capacitate C.
Memorat
manutruta
Strain


Karma: 5
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #61 : Martie 29, 2014, 21:10:21 »

Deci in graful normal, o sa am 2 muchii: x->y si y->x, de cost c.
Construiesc graful rezidual de data asta (pe grafuri orientate pur si simplu adaugam muchie in graful normal) cu muchii asa: x->y si y->x de cost 0.

Astfel, voi avea 2 matrici de capacitate si 2 matrici de flux ?
Multumesc. Implementarea asta m-i se pare destul de mult complicata fata de grafuri orientate...
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #62 : Martie 29, 2014, 21:25:51 »

Nu trebuie sa folosești doua matrici. Singura modificare este ca muchia "inversa" are și ea tot aceeași capacitate și nu 0.
Memorat
CosminRusu
De-al casei
***

Karma: 77
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #63 : Martie 29, 2014, 21:49:39 »

Salutare !

Am si eu o interbare: Cum ar fi algoritmul de flux pentru un graf neorientat ?

Multumesc anticipat.
Salut!
Sebi are dreptate, practic cand iti construiesti graful pui capacitate C si pe muchia y -> x, nu doar pe x -> y.
Ar mai fi o idee destul de inteligenta si anume fiecare nod x il transformi in doua noduri, fie ele x1 si x2, astfel ca in x1 vor intra toate muchiile incidente in x si din x2 vor iesi toate muchile care ies din x (iar intre x1 si x2 ai capacitate infinita). Mai exact pentru o muchie neorientata x-y o sa bagi in graful tau urmatoarele muchii orientate: x2 -> y1 si y2 -> x1. Si astfel am redus problema la flux maxim intr-un graf orientat.
Memorat
Owlree
Strain
*

Karma: 16
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #64 : August 01, 2014, 02:11:25 »

Pentru dumnezeu, da ce m-am chinuit cu problema asta.

Scriu aici că poate o să ajute pe cineva pe viitor.

În problemă pot exista maximum 2 arce între oricare două noduri, în cazul în care sunt exact 2, acestea sunt antiparalele. Spre exemplu putem un arc de la A la B și, în același timp, unul de la B la A. Asta e ce li se pare unora ciudat pe testele 5, 7, și care or mai fi.

Există soluții care aici pe evaluator iau 100 de puncte din noroc chior, acestea fiind greșite. Eu am luat 70 cu o astfel de soluție, trecând inclusiv și testul 5, care, am verificat, are cel puțin două arce antiparalele (72 -> 34 și 34 -> 72, liniile 72 și 156).

Dacă implementezi o metodă Ford-Fulkerson (cum ar fi Edmonds-Karp), ca să nu-ți scoți limba prin urechi de nervi, fă bine și tratează și cazul ăsta. Se tratează ușor. Dacă avem arcele A -> B și B -> A, de capacitate f(A, B) și respectiv f(B, A), pur și simplu adăugăm un nod C și rearanjăm astfel: A -> C, C -> B și B -> A, primelor două de dăm capacitatea f(A, B), iar celei din urmă capacitatea f(B, A). Practic facem același drac, da o luăm pe ocolite puțin.

Mai jos aveți un exemplu mai concret. Există arce antiparalele între nodurile v1 și v2, rezolvăm problema prin adăugarea nodului v'.


Atenție să declarați limitele cum trebuie deoarece acum pot fi mai mult de 1000 de noduri.

De ce nu vrem să avem arce antiparalele? Este explicat foarte bine în Introduction to Algorithms, 3rd Edition (CLRS) - 26.1 Flow Networks. Tot acolo găsiți și demonstrații și alte explicații. Țin să menționez că tot din aceeași cartea am luat și imaginea de mai sus, pagina 711.
« Ultima modificare: August 03, 2014, 01:33:35 de către Robert Badea » Memorat
Impaler_009
Client obisnuit
**

Karma: 23
Deconectat Deconectat

Mesaje: 59



Vezi Profilul
« Răspunde #65 : August 01, 2014, 12:57:42 »

Nu este nevoie sa tratezi muchiile antiparalele daca implementezi cu grija algoritmul.  In Cormen ti se spune sa faci asa pentru ca ei acolo stabilesc o conventie cand definesc o retea de flux (ca intre x si y poti avea o muchie cu un singur sens si deci in graful rezidual fiecare muchie are o pereche cu capacitate 0). Dar poti s-o tratezi si altfel: daca exista si x->y si y->x, amandoua apar in graful rezidual cu capacitatea lor. Restul rezolva algoritmul de la sine. Plus ca daca rezolvi probleme de flux pe un graf neorientat e cam ineficient sa adaugi M noduri.

Dar sunt de acord ca ori enuntul ori testele trebuie modificate.
Memorat
Owlree
Strain
*

Karma: 16
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #66 : August 01, 2014, 22:37:56 »

Da, ai dreptate, dar aici problema e că la tine cu grijă înseamnă să știi că există și arcele astea.

Și eu l-am implementat cu grijă (eh, atât cât se poate), dar am presupus faptul că nu există.
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #67 : August 02, 2014, 10:34:16 »

Nu trebuie implementat cu grija, nici nu trebuie sa te gândești dacă exista sau nu muchii antiparalele. Pur si simplu fiecare muchie are capacitatea ei. Bagi Edmonds-Karp si sigur vei obține rezultatul corect.
Memorat
Owlree
Strain
*

Karma: 16
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #68 : August 02, 2014, 20:49:24 »

Dacă implementezi cu liste de adiecență probabil nu e nevoie, dar dacă implementezi cu matrice o să ai ceva probleme pentru că presupunem că în graful rezidual u -> v e cât mai putem să trecem prin arcul de la u la v și v -> u cât am trecut deja, apoi dacă ar exista în rețea și arcul v -> u simultan, arcele în graful rezidual ar avea un înțeles ambiguu. Poți desigur să menții două matrice de graf rezidual, dar deja dezvoltăm prea mult un subiect care nu e chiar atât de important.

Oricum, enunțul a fost modificat, zic acum să sărbătorim. Yahoo!
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #69 : August 02, 2014, 21:58:30 »

Nu e nevoie sa memorezi doua matrice. Gândește-te ce ce întâmpla când ai grafuri neorientate. Daca graful contine arce antiparalale atunci in graful rezidual vei avea capacitați nenule pentru x->y și y->x.
Memorat
andreiulian
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #70 : Februarie 11, 2015, 17:44:27 »

Am o problemă. Începând cu testul 4 primesc "Incorect", dar am descărcat testele și îmi dă bine. Las un link către sursa mea
http://www.infoarena.ro/job_detail/1340185?action=view-source
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #71 : Februarie 11, 2015, 19:13:06 »

Nu stiu care e rostul vectorului drum, dar oricum depasesti limitele vectorului (din cauza lui u) si scrii peste tot in memorie si suprascrii multe valori de care ai nevoie.
Memorat
andreiulian
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #72 : Februarie 12, 2015, 18:56:34 »

Mulțumesc mult !  Cred că eram obosit când am scris programul. Acum iau 70 de puncte, dar dacă nu erau grupate ultimele 3 luam 80. Mulțumesc din nou.
Memorat
varga13
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #73 : Februarie 20, 2015, 17:14:09 »

salut. am incercat o implementare(mai mult sau mai putin reusita) la edmonds-karp, si pe primul test cel putin rezultatul e corect(conform atasamentelor) si vroiam sa cer o parere. Iau 0 desi cand verific testul rezultatul imi e 683.
merci.
Memorat
cata00
Strain


Karma: 24
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #74 : Martie 03, 2015, 22:45:18 »

Noroc,

Testele 2-3 și 5-10 conțin muchii multiple între aceeași pereche de noduri. Sub GNU/Linux, le puteți lista cu:

  cut -f 1-2 -d ' ' grader_test2.in|sort|uniq -d

M-am gândit că poate unele surse se poticnesc de asta. Smile

Numai bine,
Cătălin
Memorat
Pagini: 1 2 [3] 4   În sus
  Imprimă  
 
Schimbă forumul:  

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