Pagini: 1 [2] 3   În jos
  Imprimă  
Ajutor Subiect: 290 Gandaci Java  (Citit de 11788 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
0x69
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #25 : Martie 23, 2011, 16:31:50 »

Am bagat initial cuplaj maxim... tle + incorect. Am schimbat pe Hopcroft Karp, iau doar incorect. Fac cuplajul si stergerea vectorului. Omit ceva? Cei care au luat 0 si dupa 100 ce-ati facut sa scapati de incorect ?

Thx.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #26 : Octombrie 04, 2011, 17:20:27 »

AR trebuie reevaluat si aici limita, sursa asta http://infoarena.ro/job_detail/613740 lua 100 inainte.
Memorat
GavrilaVlad
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 222



Vezi Profilul
« Răspunde #27 : Octombrie 04, 2011, 19:00:20 »

@Robert: Asta e a 3-a problema deja (celelalte 2: intersect, cuvinte2) la care zici ca limita e prea mica, desi tu nu luasesi 100 nici inainte de recalculare. Whistle Rog adminii sa verifice daca cei care semnaleaza limite eronate rezolvasera corect problema inainte.
« Ultima modificare: Octombrie 04, 2011, 19:08:28 de către Gavrila Vlad » Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #28 : Octombrie 04, 2011, 19:17:28 »

Nu am luat eu, a luat prietenul meu si complexitatea e cam aceeasi ...
[PS] : Oricum trebuie recalculati multi timpi, poate ca un criteriu ar fi cea mai rea sursa care a luat 100 (in sens de timp) sa fie reevaluata (pt. fiecare pb) si daca ea nu ia 100 puncte, sa faca limita in asa fel incat sa ia 100.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #29 : Octombrie 05, 2011, 02:07:27 »

Nu mi se pare bun criteriul. Trebuie sa ia 100 de puncte sursele care merita.
Memorat

Am zis Mr. Green
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #30 : Octombrie 05, 2011, 07:35:23 »

Am facut un cuplaj maxim care lua 100 in arhiva educationala .... ce altceva sa mai fac ... asa e si solutia oficiala ...
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #31 : Iunie 29, 2012, 12:20:40 »

Buna Ziua.am facut la problema asta un Hopcroft Karp si nu iau decat 0 pct (incorect + 5 TLE) :'(vreo sugestie ceva.
Multumesc anticipat. Very Happy
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #32 : Iulie 05, 2012, 22:01:00 »

 Cry Cry :'(am verificat de 100 ori sursa si nu vad o greseala.rog un admin sa se uite peste sursa sa vada ce am gresit Brick wall Brick wall Brick wall
Multumesc anticipat!
Cod:

#include<fstream>
#include<cstring>
#include<vector>

#define NN 10001
#define pb push_back

using namespace std;
ofstream out("java.out");

int  n,m,e,t,uz[NN],dr[NN],st[NN];
vector<int>G[NN];
typedef vector<int>:: iterator IT;

void read();
int pairup(int start);
int facuplaj();

int main()
{
read();
return 0;


}

int pairup(int start)
{
if(uz[start])
return 0;
uz[start]=1;
for(IT I=G[start].begin();I!=G[start].end();++I)
if(!st[*I] || pairup(st[*I]) )
{
st[*I]=start;
dr[start]=*I;
return 1;
}
return 0;
}

int facuplaj()
{
int ok=1;
int cuplaj=0;
while(ok)
{
ok=0;
memset(uz,0,sizeof(uz));
for(int i=1;i<=n;i++)
if(!dr[i] && pairup(i))
{
++cuplaj;
ok=1;
}
}
return cuplaj;
}


void read()
{
ifstream in("java.in");
in>>t;
while(t)

{

in>>m>>n>>e;
for(int x,y,i=1;i<=e;i++)
{
in>>x>>y;
G[x].pb(y);

}

facuplaj();
int nrc=0;
for(int i=1;i<=n;i++)
if(dr[i])
++nrc;
out<<nrc<<'\n';
//out<<i<<" "<<dr[i]<<" "<<'\n';

t--;
}
}



Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #33 : Iulie 05, 2012, 22:12:25 »

Cred ca ai incurcat m-ul cu n-ul la un moment dat. Mi se pare ca for-urile din cuplaj trebuie sa se duca pana la m.
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #34 : Iulie 06, 2012, 06:49:12 »

Cred ca ai incurcat m-ul cu n-ul la un moment dat. Mi se pare ca for-urile din cuplaj trebuie sa se duca pana la m.
am modificat ,dar tot 0 pct iau Cry  Brick wall
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #35 : Iulie 06, 2012, 07:58:26 »

Nu te supara pe ce-ti zic acum, dar daca te-ai mai uitat pe forum ai vazut ca nu suntem tocmai pro acestei strategii "spuneti-mi unde am gresit". In general daca iti spunem noi ce ai gresit nu castigi prea mult.
Cel mai bine iti faci un backtracking, usor, scurt, si un generator de teste. Daca nu stii cum iti dau un exemplu. Cu ocazia asta inveti ceva pentru olimpiada.
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #36 : Iulie 17, 2012, 21:26:52 »

 Very Happy am reusit sa iau 60 pct:AM  8 TLE.folosesc Hopcroft Karp .ce as mai putea face sa reduc timpul? Think

Multumesc Anticipat!!! Smile
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #37 : Iulie 17, 2012, 21:35:17 »

Desparte acel for din functia pairup() astfel incat prima data verifici daca il poti cupla simplu cu un vecin si a doua oara daca nu cumva poti recupla nodurile si apoi sa-l cuplezi cu vecinul. Deci sa faci doua for-uri separate pentru fiecare conditie.
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #38 : Iulie 17, 2012, 21:39:20 »

Desparte acel for din functia pairup() astfel incat prima data verifici daca il poti cupla simplu cu un vecin si a doua oara daca nu cumva poti recupla nodurile si apoi sa-l cuplezi cu vecinul. Deci sa faci doua for-uri separate pentru fiecare conditie.
am incercat dar tot 60 iau Cry
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #39 : Iulie 17, 2012, 22:04:58 »

N-ai facut ce am zis eu.
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #40 : Iulie 17, 2012, 22:06:06 »

N-ai facut ce am zis eu.

Cod:
int pairup(int start)
{
if(uz[start])
return 0;
uz[start]=1;
for(IT I=G[start].begin();I!=G[start].end();++I)
if(!dr[*I]  )
{
dr[*I]=start;
st[start]=*I;

return 1;
}
for(IT I=G[start].begin();I!=G[start].end();++I)
if( pairup(dr[*I] ) )
{
dr[*I]=start;
st[start]=*I;
return 1;
}

return 0;
}


nu asa?
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #41 : Iulie 17, 2012, 22:09:39 »

Ba da. Scuze, n-am vazut in niciuna din sursele tale asta. Probabil va trebui si sa parsezi citirea pentru 100.
Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #42 : Iulie 17, 2012, 22:34:22 »

 Yahoo! Yahoo! Yahoo! am luat 100. de 2 ore tot incercam sa vad dc iau TLE ,dau eu trimiteam alta sursa Brick wall.
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #43 : Martie 28, 2013, 16:28:13 »

Algoritmul meu este de a obtine un cuplaj maxim intre cercetatori(multime 1-m) si gandaci. Iau WA pe toate testele. In exemplu imi da bine. Am optimizat sa nu iau TLE sau MME. Imi bat capul de ore intregi si nu vad greseala. Ce am putut gresi aici ?
<code>
 #include <cstdio>
#include <vector>
#include <cstring>
#define NMAX 10010
using namespace std;

vector < int > Graf[NMAX];
int vizitat[NMAX];
int dr[NMAX];
int g[NMAX];
int st[NMAX];
int n,m,e,nr;
int T;
bool ok;

bool Hopcroft_Karp(int nod){

   if(vizitat[nod]) return 0;
   vizitat[nod] = 1;
    for(vector < int >::iterator it = Graf[nod].begin();it!=Graf[nod].end();++it)
        if(!dr[*it]){
            dr[*it] = nod;
            st[nod] = *it;
            return 1;
        }
    for(vector < int >::iterator it = Graf[nod].begin();it!=Graf[nod].end();++it)
        if( Hopcroft_Karp(dr[*it])){
            dr[*it] = nod;
            st[nod] = *it;
            return 1;
        }

return 0;
}

int main(){

freopen("java.in","r",stdin);
freopen("java.out","w",stdout);
int x,y;

    scanf("%d",&T);
    while(T){
          nr=0;
        scanf("%d%d%d",&m,&n,&e);
    while(e){

        scanf("%d%d",&x,&y);
        Graf
  • .push_back(y);
       g
  • = 1;

    --e;
    }

    ok=1;
    nr=0;
    while(ok){

        ok = 0;
        for(register int i=1;i<=m;++i)
        if(!st)
        if(Hopcroft_Karp(i)) ok=1;
        memset(vizitat,0,sizeof(vizitat));
    }
        for(register int i=1;i<=n;++i)
            if(dr) ++nr;
            printf("%d\n",nr);

     for(register int i=1;i<=m;++i)
        if(g)
        Graf.assign(Graf.size()+1,0);
        memset(g,0,sizeof(g));
    --T;

    }
return 0;
}
</code>
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #44 : Martie 28, 2013, 16:33:42 »

Incearca sa resetezi toti vectorii folositi, inainte de a incepe un nou test. Succes!
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #45 : Martie 28, 2013, 16:48:11 »

Intr-adevar uitasem sa setez la 0 toti vectorii. Insa am facut aceasta modificare si iau 10 pcte. Iau si WA si TLE  pe unele teste.
Uite acum arata acum programul:

Cod:
#include <cstdio>
#include <vector>
#include <cstring>
#define NMAX 10010
using namespace std;

vector < int > Graf[NMAX];
int vizitat[NMAX];
int dr[NMAX];
int g[NMAX];
int st[NMAX];
int n,m,e,nr;
int T;
bool ok;

bool Hopcroft_Karp(int nod){

   if(vizitat[nod]) return 0;
   vizitat[nod] = 1;
    for(vector < int >::iterator it = Graf[nod].begin();it!=Graf[nod].end();++it)
        if(!dr[*it]){
            dr[*it] = nod;
            st[nod] = *it;
            return 1;
        }
    for(vector < int >::iterator it = Graf[nod].begin();it!=Graf[nod].end();++it)
        if( Hopcroft_Karp(dr[*it])){
            dr[*it] = nod;
            st[nod] = *it;
            return 1;
        }

return 0;
}

int main(){

freopen("java.in","r",stdin);
freopen("java.out","w",stdout);
int x,y;

    scanf("%d",&T);
    while(T){
          nr=0;
        scanf("%d%d%d",&m,&n,&e);
    while(e){

        scanf("%d%d",&x,&y);
        Graf[x].push_back(y);
        g[x] = 1;

    --e;
    }

    ok=1;
    nr=0;
    while(ok){

        ok = 0;
        for(register int i=1;i<=m;++i)
        if(!st[i])
        if(Hopcroft_Karp(i)) ok=1;
        memset(vizitat,0,sizeof(vizitat));
    }
        for(register int i=1;i<=n;++i)
            if(dr[i]) ++nr;
            printf("%d\n",nr);

     for(register int i=1;i<=m;++i)
        if(g[i])
        Graf[i].assign(Graf[i].size()+1,0);
        memset(g,0,sizeof(g));
        memset(dr,0,sizeof(dr));
        memset(st,0,sizeof(st));
        memset(vizitat,0,sizeof(vizitat));
    --T;

    }
return 0;
}

Editat de moderator: Foloseste tag-ul [ code ] [/ code ] cand postezi cod!
« Ultima modificare: Martie 28, 2013, 16:52:11 de către Paul-Dan Baltescu » Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #46 : Martie 28, 2013, 16:51:19 »

Inlocuieste asta :
Cod:
for(register int i=1;i<=m;++i)
        if(g)  Graf.assign(Graf.size()+1,0);
cu
Cod:
for(int i=1;i<=m;i++)
        Graf[i].clear();
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #47 : Martie 28, 2013, 17:00:11 »

Wow am luat 90. Inca iau TLE pe 2 teste.
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #48 : Martie 28, 2013, 17:00:57 »

Pentru 100 trebuie sa parsezi citirea.  Smile
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #49 : Martie 28, 2013, 17:05:38 »

Da ma gandeam ca trebuie sa parsez si am luat 100. Mersi mult pentru cele 2 sfaturi cruciale. Mai ales ala cu Graf.clear am sa-l retin toata viata  Banana
Memorat
Pagini: 1 [2] 3   În sus
  Imprimă  
 
Schimbă forumul:  

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