Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Flux2  (Citit de 5400 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
savim
Nu mai tace
*****

Karma: 194
Deconectat Deconectat

Mesaje: 333



Vezi Profilul
« : Februarie 24, 2013, 01:29:12 »

Aici se pot pune întrebări legate de problema Flux2 de la Runda 3 a concursului Algoritmiada 2013.

Timpul alocat întrebărilor este de 1 ora dupa inceperea concursului. Întrebările vor fi formulate astfel încât să se poată răspunde cu DA sau NU. În caz contrar sau în cazul în care întrebarea își găsește răspuns în enunțul problemei, răspunsul va fi FARA COMENTARII.
Memorat
mugurelionut
De-al casei
***

Karma: 209
Deconectat Deconectat

Mesaje: 136



Vezi Profilul
« Răspunde #1 : Februarie 24, 2013, 09:08:12 »

Pentru fiecare retea data, se garanteaza ca cantitatea de apa transportata de la S la D este maxim posibila ?

Altfel spus, trebuie DOAR sa verificam ca se obtine costul minim (in conditiile in care cantitatea de apa este maxima) ?

In cazul in care raspunsul la intrebarea precedenta este NU: trebuie sa verificam atat:
1) ca se transporta o cantitate maxima de apa de la S la D
SI
2) costul de transport al apei este minim
?
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #2 : Februarie 24, 2013, 09:09:10 »

NU.
Memorat
Cristy94
De-al casei
***

Karma: 37
Deconectat Deconectat

Mesaje: 128



Vezi Profilul
« Răspunde #3 : Februarie 24, 2013, 09:14:02 »

Cate teste sunt? Limitele lui T nu sunt precizate.
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #4 : Februarie 24, 2013, 09:15:37 »

T <= 6. Modific acum enunutul.
Memorat
Cristy94
De-al casei
***

Karma: 37
Deconectat Deconectat

Mesaje: 128



Vezi Profilul
« Răspunde #5 : Februarie 24, 2013, 09:37:37 »

"propune ca prin aceasta conducta sa treaca fi unitati de apa pe secunda"

Apa care trece prin conducta trece in sensul x->y ?
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #6 : Februarie 24, 2013, 09:39:31 »

DA
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #7 : Februarie 24, 2013, 11:08:21 »

Pot exista mai multe conducte intre doua rezervoare?
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #8 : Februarie 24, 2013, 11:08:58 »

NU
Memorat
Cristy94
De-al casei
***

Karma: 37
Deconectat Deconectat

Mesaje: 128



Vezi Profilul
« Răspunde #9 : Februarie 24, 2013, 13:03:18 »

Sad

Pentru fiecare retea data facem o data algoritmul de flux (cautam drumul de ameliorare de cost minim) si daca exista inseamna ca raspunsul pentru acel test este 0.
Imi da ba TLE (daca initializez de fiecare data matricile ce le folosesc) ba WA ... Asta era ideea de rezolvare?
Memorat
mugurelionut
De-al casei
***

Karma: 209
Deconectat Deconectat

Mesaje: 136



Vezi Profilul
« Răspunde #10 : Februarie 24, 2013, 14:01:02 »

Exista 2 cazuri cand raspunsul pe un test e 0:

1) daca fluxul mai poate fi crescut cu cel putin 1 unitate (in acest caz nu ai nevoie sa folosesti si costurile : o simpla parcurgere de la S catre D e suficienta, tinand cont ca e posibil ca pt a incrementa fluxul global sa fie nevoie sa-l decrementezi pe unele muchii ; anyway, e practic o iteratie dintr-un algoritm de flux maxim fara costuri)

2) daca fluxul nu mai poate fi crescut, dar exista un ciclu de cost negativ in reteaua data (adica costul ar putea fi redus) Pentru a determina daca exista ciclu de cost negativ, fiecare muchie x->y de cost C se transforma in maxim 2 muchii :
-- muchie x->y de cost C daca flux(x->y) < capacitate(x->y)
-- muchie y->x de cost -C  daca flux(x->y) > 0

Cazul 2 e cazul mai greu, deoarece are complexitatea mai mare: teoretic se poate ajunge la O(N^3) sau O(N*(N+M)) folosind algoritmul Bellman-Ford sau Bellmand-Ford-Moore (practic Bellmand-Ford dar cu coada). Eu am implementat destul de eficient algoritmul asta (desi, aparent, ultima versiune submitata nu era cea mai rapida si eram aproape sa iau TLE pe unul din teste).

Sunt curios daca exista o solutie de complexitate (teoretica) mai buna.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #11 : Februarie 24, 2013, 14:49:19 »

Exista 2 cazuri cand raspunsul pe un test e 0:

1) daca fluxul mai poate fi crescut cu cel putin 1 unitate (in acest caz nu ai nevoie sa folosesti si costurile : o simpla parcurgere de la S catre D e suficienta, tinand cont ca e posibil ca pt a incrementa fluxul global sa fie nevoie sa-l decrementezi pe unele muchii ; anyway, e practic o iteratie dintr-un algoritm de flux maxim fara costuri)

2) daca fluxul nu mai poate fi crescut, dar exista un ciclu de cost negativ in reteaua data (adica costul ar putea fi redus) Pentru a determina daca exista ciclu de cost negativ, fiecare muchie x->y de cost C se transforma in maxim 2 muchii :
-- muchie x->y de cost C daca flux(x->y) < capacitate(x->y)
-- muchie y->x de cost -C  daca flux(x->y) > 0

Cazul 2 e cazul mai greu, deoarece are complexitatea mai mare: teoretic se poate ajunge la O(N^3) sau O(N*(N+M)) folosind algoritmul Bellman-Ford sau Bellmand-Ford-Moore (practic Bellmand-Ford dar cu coada). Eu am implementat destul de eficient algoritmul asta (desi, aparent, ultima versiune submitata nu era cea mai rapida si eram aproape sa iau TLE pe unul din teste).

Sunt curios daca exista o solutie de complexitate (teoretica) mai buna.

Aceasta este si solutia oficiala. Felicitari, Mugurel!
Memorat

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

Karma: 23
Deconectat Deconectat

Mesaje: 207



Vezi Profilul
« Răspunde #12 : Februarie 28, 2013, 22:41:59 »

Spuneti-mi va rog unde gresesc  Brick wall
Am incercat sa fac in felul urmator:
pentru o muchie x y si x1-fluxul propus de angajat, y1-fluxul maxim pe muchie, adaug
cost [ x ] [ y ]-costul de intretinere; cost [ y ] [ x ]=-cost [ x ][ y ];
capacitate [ y] [ x]=x1; capacitate  [ x] [ y]=y1-x1;
acum pot merge pe o muchie doar daca capcitate [ x][ y]>0;
Dupa ce mi-am format graful in acest fel fac un dfs din sursa sa vad daca pot ajunge la destinatie, daca ajung rezulta ca voi putea mari fluxul cu capacitatea minima de pe drum, respectiv in acest caz consider planul angajatului gresit.
Daca nu am ajuns la destinatie controlez daca exista ciclu de cost negativ cu Bellman Ford, daca exista iarasi consider planul gresit, daca nu atunci planul este corect.
Iau incorect.  sad
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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