|
•S7012MY
|
 |
« Răspunde #1 : Mai 28, 2010, 17:20:27 » |
|
Edit: Am gasit greseala. Ms mult de ajutor. 
|
|
« Ultima modificare: Mai 28, 2010, 20:59:25 de către Trimbitas Petru »
|
Memorat
|
|
|
|
•alexandru92
|
 |
« Răspunde #2 : Mai 28, 2010, 17:30:22 » |
|
Cand extragi din stiva elementele nod nu trebuie sa fie diferit de z, nu de n ?
|
|
|
Memorat
|
|
|
|
•newsabbath
Strain
Karma: 0
Deconectat
Mesaje: 8
|
 |
« Răspunde #3 : Decembrie 13, 2010, 09:55:30 » |
|
Buna Va rog cine are timp... Am nevoie de ajutor. #include <fstream> #include <stdio.h> #include <stack>
using namespace std;
struct nod { int inf; nod *urm; }*L[100000];
int n,m; int viz[100001], low[100001], in, vizs[100001]; stack <int> S;
void add(nod *&prim, int vec) { nod *p= new nod; p->inf = vec; p->urm = prim; prim = p; }
void citire() {
scanf("%d %d",&n,&m);
for (int i = 0; i < m; i++) { int x,y; scanf("%d %d",&x,&y); add(L[x], y); } }
void tarjan(int v)//indicele nodului din care plec { viz[v] = in; low[v] = in; in++; S.push(v); vizs[v] = 1; for(nod *p=L[v]; p; p=p->urm) if(viz[p->inf] == 0) { tarjan(p->inf); low[v] = min(low[v], low[p->inf]); } else if(vizs[p->inf] == 1) low[v] = min(low[v], viz[p->inf]);
int x; if(viz[v] == low[v]) do { x = S.top(); printf("%d ", x); vizs[x] = 0; S.pop(); }while(v != x );
} int main() { freopen("ctc.in","r",stdin); freopen("ctc.out","w",stdout); citire(); for(int i=1;i<=n;i++) if(viz[ i ] == 0) { tarjan(i); printf("\n"); } return 0; }
Multumesc frumos!
|
|
« Ultima modificare: Decembrie 13, 2010, 11:52:08 de către Gabriel Bitis »
|
Memorat
|
|
|
|
•livium
Strain
Karma: -2
Deconectat
Mesaje: 21
|
 |
« Răspunde #4 : Decembrie 13, 2010, 20:44:46 » |
|
Am trimis si eu un program spre evaluare (algoritmul lui Gabow) si am erorile astea pe care nu le-am avut pe pc-ul meu:
Eroare de compilare: user.cpp:160:2: warning: no newline at end of file user.cpp:30: error: '>>' should be '> >' within a nested template argument list user.cpp:31: error: '>>' should be '> >' within a nested template argument list user.cpp:71: error: '>>' should be '> >' within a nested template argument list
Care-i faza?
|
|
|
Memorat
|
|
|
|
•toni2007
|
 |
« Răspunde #5 : Decembrie 13, 2010, 21:24:11 » |
|
Nu trebuie sa apara doua semne ">" unul langa altul, pt ca se considera operatorul de shift-are. Pune cu un spatiu intre ele cand declari containeri stl.
|
|
|
Memorat
|
|
|
|
•newsabbath
Strain
Karma: 0
Deconectat
Mesaje: 8
|
 |
« Răspunde #6 : Decembrie 13, 2010, 22:56:24 » |
|
Buna,
va uitati peste alg tarjan ... astept o idee Sursa este mai sus.
Multumesc!
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #7 : Decembrie 16, 2010, 22:53:58 » |
|
Din cate am observat, problema ta e la afisare. for(int i=1;i<=n;i++) if(viz[ i ] == 0) { tarjan(i); printf("\n"); }
In codul de mai sus, se executa "printf("\n");" doar cand se trece la alta componenta conexa (pentru ca altfel se merge pe lantul de vecinatati in interiorul procedurii). De asemenea, trebuie sa afisezi si numarul de componente tari conexe, deci trebuie sa retii toate componentele pentru a le afisa dupa ce afisezi numarul lor. De aici probabil stii ce ai de facut. Sper ca te-am ajutat. (Mie nu mi-a verificat nimeni sursele  )
|
|
|
Memorat
|
|
|
|
•newsabbath
Strain
Karma: 0
Deconectat
Mesaje: 8
|
 |
« Răspunde #8 : Decembrie 21, 2010, 01:12:26 » |
|
multumesc
si eu sper sa apuc ziua sa nu mai fie nevoie ...
sabbath
|
|
|
Memorat
|
|
|
|
•maritim
|
 |
« Răspunde #9 : Octombrie 11, 2011, 17:54:13 » |
|
Eroare in evaluator  .
|
|
|
Memorat
|
|
|
|
•mihaibogdan10
Strain
Karma: -1
Deconectat
Mesaje: 3
|
 |
« Răspunde #10 : Noiembrie 04, 2011, 23:30:42 » |
|
S-a modificat de curant limita superioara de timp? Acum e 0,05s. Am trimis pana si solutia oficiala pentru 100 de puncte si iese din timp la trei teste.
Am observat ca acum ceva vreme lumea trecea teste cu 0.3s > 0.05s lejer...
|
|
|
Memorat
|
|
|
|
•valentin.harsan
Strain
Karma: 33
Deconectat
Mesaje: 41
|
 |
« Răspunde #11 : Noiembrie 08, 2011, 11:09:49 » |
|
mda... se pare ca acu nu poti lua mai mult de 60 pct. la multe probleme nu se mai poate lua 100 odata cu injumatatirea timpului
|
|
|
Memorat
|
|
|
|
•claudiumihail
Strain
Karma: 5
Deconectat
Mesaje: 33
|
 |
« Răspunde #12 : Ianuarie 15, 2012, 08:36:45 » |
|
Salut, Ar merita mentionat in descrierile solutiilot posibile pentru gasirea componentelor tare conexe si algoritmul Cheriyan–Mehlhorn/Gabow ( http://en.wikipedia.org/wiki/Cheriyan%E2%80%93Mehlhorn/Gabow_algorithm), care ia 100p (vezi http://infoarena.ro/job_detail/661763) si se comporta ca timpi cam la fel cu algoritmul lui Tarjan. Implementation-wise pare putin mai straight forward decat algoritmul lui Tarjan (nu ca al lui Tarjan ar fi extrem de complicat). Anyway just my 2 cents. Poate foloseste cuiva sa stie si de alternativa asta. Claudiu
|
|
|
Memorat
|
|
|
|
•CosminRusu
|
 |
« Răspunde #13 : Mai 25, 2016, 22:03:32 » |
|
Mi se pare ca solutia oficiala care implementeaza algoritmul lui Tarjan nu e chiar corecta. Cel putin in cazul doi cand avem o muchie inapoi, low[node] = min(low[node], idx[new_node]); si nu low[node] = min(low[node], low[new_node]);
intrucat low[node] ar trebui sa fie indicele minim pe care il putem atinge printr-o singura muchie inapoi. Asa vad ca e implementat pe wikipedia, iar in articolul asta chiar insista pe aceasta greseala. Sunt curios daca ar trebui imbunatatite testele sau pur si simplu modificarea asta nu afecteaza neaparat corectitudinea algoritmului.
|
|
|
Memorat
|
|
|
|
|
|
•tudorgalatan
Strain
Karma: -1
Deconectat
Mesaje: 27
|
 |
« Răspunde #16 : August 12, 2016, 10:48:26 » |
|
|
|
|
Memorat
|
|
|
|
•st_marian
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #17 : Aprilie 30, 2019, 16:01:08 » |
|
...
|
|
|
Memorat
|
|
|
|
|