Pagini: 1 [2]   În jos
  Imprimă  
Ajutor Subiect: 142 Ciclu  (Citit de 13296 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #25 : Februarie 21, 2010, 22:17:03 »

Tu vei găsi 267 (cea mai mică valoare pentru care ai ciclu negativ).
Memorat
new_programmer
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 22



Vezi Profilul
« Răspunde #26 : Februarie 22, 2010, 16:19:22 »

Mersi de idee Andrei, sa nu uitati celor ce nu va da 100 de puncte sa puneti long long.


« Ultima modificare: Februarie 22, 2010, 16:54:11 de către Pop Armin » Memorat
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #27 : Februarie 25, 2010, 14:41:30 »

Salut!
Ce este special la testul 9 pentru ca nu-mi da deloc  sad  .
Multumesc anticipat!

LE Am rezolvat!!
« Ultima modificare: Martie 16, 2010, 15:56:04 de către Calin Dragos Ion » Memorat
Andrei_Scorpio
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #28 : Martie 15, 2010, 17:56:02 »

Am si eu o intrebare..trebuie sa implementez dinamic sau circular coada la Bellman-Ford? sau cat de mare sa o iau? Iau Killed by signal 11(SIGSEGV) si nu stiu unde iese in porumbi...
Memorat
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #29 : Martie 16, 2010, 15:55:42 »

Am si eu o intrebare..trebuie sa implementez dinamic sau circular coada la Bellman-Ford? sau cat de mare sa o iau? Iau Killed by signal 11(SIGSEGV) si nu stiu unde iese in porumbi...

La testul 9  ciclul negativ nu se formeaza in 1 Smile  Daia nu merge. aceiasi problema am avut si eu.
« Ultima modificare: Mai 24, 2010, 18:12:06 de către Dragos » Memorat
Bogdan_tmm
De-al casei
***

Karma: 4
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #30 : Iulie 02, 2010, 21:04:27 »

Daca fac belman ford cu coada numarand sa nu am mai mult de n*m pasi si apoi verific daca pentru muchiile existente se poate obtine un cost mai mic nu e corect? Iau 0 puncte cu abordarea asta pe cand cu un belman ford fara coada aplicat de n ori si apoi verificarea iau 60.
Memorat
vendetta
De-al casei
***

Karma: 72
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #31 : August 13, 2011, 11:25:53 »

Am o cautare binara + bellman ford si iau 90 de pct cu wa pe ultimul test...
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #32 : August 13, 2011, 20:21:14 »

Mareste valoarea pe care o cauti binar Thumb up
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #33 : August 13, 2011, 22:19:22 »

Aia era, i-am lasat mesaj  Ok.
Memorat
balakraz94
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #34 : Noiembrie 10, 2011, 20:26:46 »

Imi poate da cineva un test mai mare, ca sa ma verific pana isi revine evaluatorul ?
Memorat
balakraz94
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #35 : Noiembrie 12, 2011, 13:03:41 »

Se mai pot lua 100p la problema asta cu noua limita de timp ?
Pentru ca am parsat citirea, am luat precizia minima si iau 90p.
Memorat
claudiumihail
Strain
*

Karma: 5
Deconectat Deconectat

Mesaje: 33



Vezi Profilul
« Răspunde #36 : Februarie 12, 2012, 19:41:42 »

Salut,

Se mai pot lua 100p cu limita actuala de timp (poate s-a marit de cand a intrebat lumea desi ma indoiesc). Ideea e sa modifici putin Bellman Ford-ul sa iasa repede cand detecteaza ca exista un ciclu (fail fast). Iar cealalta idee sa sa faci cautarea binara sa inceapa de la o valoarea cat de cat apropiata de costum mediu minim (astfel incat sa faci cat mai putine apeluri catre Bellman Ford). Poti gasi o euristica ceva pentru valoarea de inceput. Eu asa am facut.

Sper sa ajute pe cineva indicatiile,
Claudiu
Memorat
valentin.harsan
Strain
*

Karma: 33
Deconectat Deconectat

Mesaje: 41



Vezi Profilul
« Răspunde #37 : Mai 17, 2012, 10:08:26 »

cred ca nu se mai poate lua 100 cu noua limita de timb  Confused
am trimis o sursa care lua 100 si a luat 90 cu TLE pe ultimu test  Brick wall
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #38 : Mai 17, 2012, 10:47:48 »

Se  poate lua 100 si cu noua limita de timp Smile
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #39 : Februarie 27, 2013, 21:56:47 »

Vreau sa gasesc cea mai mare valoare intre 2 numere cunoscute de tip float. Acea valoare o voi scadea pe toate muchiile unui graf, astfel incat sa nu obtin ciclu negativ daca aplic algoritmul Bellman Ford.
Eu am incercat ceva si nu inteleg ce nu merge. Mie mijloc imi returneaza la final ca fiind 1.5 si eu trebuie sa obtin 1.75.Ma intereseaza cel mai mult de ce nu merge cand caut binar in main, in rest cred ca am facut bine. Iata sursa mea:

#include <cstdio>
#include <vector>
#include <list>
#include <utility>
#include <queue>
#include <cstring>
#include <iomanip>
#define inf 1000000
#define NMAX 1001
using namespace std;

typedef pair<int,float> pereche;
vector < list < pereche > > Graf;
queue < int > q;
int inQueue[NMAX],vizitat[NMAX];
vector < int > aparitii;
vector < float > d;
int n,m,scaderi;
float minim = inf;

void citesc(){

    int x,y;
    float c;
    freopen("ciclu.in","r",stdin);
    freopen("ciclu.out","w",stdout);
    scanf("%d%d",&n,&m);
    Graf.resize(n+1);
    d.resize(n+1);
    aparitii.resize(n+1);
    for(register int i=1;i<=m;++i){
        scanf("%d%d%f",&x,&y,&c);
        Graf
.push_back(pereche(y,c));
        Graf[y].push_back(pereche(x,c));
        if(c < minim)
            minim = c;
    }
}

void DFS(int nod){

    vizitat[nod] = 1;
    for(list < pereche >::iterator it = Graf[nod].begin();it!=Graf[nod].end();++it)
        if(!vizitat[it->first]){
            it->second -= minim;
            DFS(it->first);
    }}

int Bellman_Ford(int nod){

    int top;
    q.push(nod);
    inQueue[nod] = 1;
    ++aparitii[nod];
    d[nod] = 0;
        while(!q.empty()){
            top = q.front();
            q.pop();
            inQueue[top] = 0;
                for(list <pereche>::iterator it = Graf[top].begin();it!=Graf[top].end();++it)
                    if(d[it->first] > d[top] + it->second){
                        d[it->first] = d[top] + it->second;
                        if(!inQueue[it->first]){
                            inQueue[it->first] = 1;
                            q.push(it->first);
                        }
                    ++aparitii[it->first];
                    if(aparitii[it->first] >= n)
                    return 0;
            }
        }
return 1;
}

int main(){

    citesc();
    DFS(1);
        scaderi++;
 d.assign(n+1,inf);
 while(Bellman_Ford(1)){
            d.assign(n+1,inf);
            memset(vizitat,0,sizeof(vizitat));
            aparitii.assign(n+1,0);
            DFS(1);
        scaderi++;
        }

   float inceput = (scaderi-1)*minim;
   float sfarsit = scaderi*minim;
   float mijloc = 0;

        while(inceput <= sfarsit){

            memset(vizitat,0,sizeof(vizitat));
            aparitii.assign(n+1,0);
            d.assign(n+1,inf);

            mijloc = (inceput+sfarsit)/2;
            minim = mijloc;
            DFS(1);
            if(!Bellman_Ford(1))
            sfarsit = mijloc-1;
            else
            inceput = mijloc+1;

        }

printf("%d\n",scaderi);
printf("%f",mijloc);
return 0;
}
Memorat
RaduDo
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 16



Vezi Profilul
« Răspunde #40 : Februarie 25, 2014, 17:40:42 »

Imi poate da si mie cineva un test fiindca pe toate testele incercate imi merge, insa iau numai 20 de puncte?.. Cry
Multumesc anticipat!
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

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