Nu aveti permisiuni pentru a descarca fisierul grader_test3.in
Diferente pentru problema/algoritm intre reviziile #78 si #79
Nu exista diferente intre titluri.
Diferente intre continut:
== include(page="template/taskheader" task_id="algoritm") ==
Desi nu e studentin anul 1 la FMI, Por Costel s-a apucat sastudieze Algoritmica Grafurilor. Astazi, elinvatadespre alogritmul Bellman-Ford, care calculeaza drumurile minime de la un nod sursa(in cazul de fata, nodul 1) la toate celelalte noduriintr-un graf orientat cu costuri pe muchii. Por Costel, folosindu-si cunostintele sale minimale de informaticaa reusit sascrie urmatorul cod in C++ ce reprezintao variatie al algoritmului Bellman-Ford:
Deşi nu e student în anul 1 la FMI, Por Costel s-a apucat să studieze Algoritmica Grafurilor. Astăzi, el învaţă despre alogritmul Bellman-Ford, care calculeaza drumurile minime de la un nod sursă (in cazul de faţă, nodul 1) la toate celelalte noduri într-un graf orientat, cu costuri pe muchii. Por Costel, folosindu-şi cunoştinţele sale minimale de informatică a reuşit să scrie următorul cod in C++ ce reprezintă o variaţie al algoritmului Bellman-Ford:
==code(cpp) | for (int i = 1; i <= n; ++i)
if (d[ E[i].x ] + E[i].cost < d[ E[i].y ] )
{
ok = 0;
d[ E[i].y ] = d[ E[i].x ] + E[i].cost; //Imi place porumbul!
d[ E[i].y ] = d[ E[i].x ] + E[i].cost; //Îmi place porumbul!
}
}
}
==
Observam mai multe deficientein codul de mai sus. Pe langadocumentatia rudimentara, mai avem faptul caPor Costel isi retine graful printr-un vector de muchii (vectorul <tex>E</tex>). O muchie este retinutaca un triplet <tex>(x,y,cost)</tex> cu semnficiatia camuchia porneste de la <tex>x</tex> la <tex>y</tex>si are costul <tex>cost</tex>. Dar cel mai rau probabil este faptul caprogramul este LENT !
Observăm mai multe deficienţe în codul de mai sus. Pe lângă documentaţia rudimentară, mai avem faptul că Por Costel işi reţine graful printr-un vector de muchii (vectorul <tex>E</tex>). O muchie este reţinută ca un triplet <tex>(x,y,cost)</tex> cu semnficiaţia că muchia porneşte de la <tex>x</tex> la <tex>y</tex> şi are costul <tex>cost</tex>. Dar cel mai rău probabil este faptul că programul este LENT !
Pentru cavrem ca prietenul nostru cu copite sa plece cu o parere bunadespre informatica, am vrea saia 100 de puncte cu aceastasursa, ba chiar saruleze cat mai repede. Este clar canumarul de iteratii ale _while()-ului_ este influentat direct de ordinea muchiilor in vectorul de muchii <tex>E</tex>.
Pentru că vrem ca prietenul nostru cu copite sa plece cu o părere bună despre informatică, am vrea să ia 100 de puncte cu această sursă, ba chiar să ruleze cât mai repede. Este clar că numărul de iteraţii ale _while()-ului_ este influenţat direct de ordinea muchiilor in vectorul de muchii <tex>E</tex>.
Dandu-se un graf orientat cu <tex>N</tex> nodurisi <tex>M</tex> muchii, vi se cere saafisati o ordonare a muchiilor astfel incat algoritmul Bellman-Ford scris de Por Costel sase termine dupaexact douaiteratii (adicasase intrein instructiunea repetitiva_while()_ doar de douaori).
Dându-se un graf orientat cu <tex>N</tex> noduri şi <tex>M</tex> muchii, vi se cere să afisaţi o ordonare a muchiilor astfel incât algoritmul Bellman-Ford scris de Por Costel să se termine după exact două iteraţii (adică să se intre în instrucţiunea repetitivă _while()_ doar de două ori).
h2. Date de intrare
În fişierul de intrare $algoritm.in$ se va gasi pe prima linie <tex>T</tex>, numarul de teste. Fiecare dintre cele <tex>T</tex> teste are formatul urmator: pe prima linie sunt douanumere <tex>N</tex>si <tex>M</tex>, numarul de noduri, respectiv numarul de muchii din graf. Urmeaza<tex>M</tex> linii ce descriu muchiile, fiecare continand exact 3 numere <tex>a</tex>, <tex>b</tex>, <tex>c</tex>, cu semnificatia caexistao muchie de la nodul <tex>a</tex> la nodul <tex>b</tex> care are costul <tex>c</tex>.
În fişierul de intrare $algoritm.in$ se va găsi pe prima linie <tex>T</tex>, numărul de teste. Fiecare dintre cele <tex>T</tex> teste are formatul următor: pe prima linie sunt două numere <tex>N</tex> şi <tex>M</tex>, numărul de noduri, respectiv numărul de muchii din graf. Urmează <tex>M</tex> linii ce descriu muchiile, fiecare conţinând exact 3 numere <tex>a</tex>, <tex>b</tex>, <tex>c</tex>, cu semnificaţia că există o muchie de la nodul <tex>a</tex> la nodul <tex>b</tex> care are costul <tex>c</tex>.
h2. Date de ieşire
În fişierul de ieşire $algoritm.out$ se vor afisa <tex>T</tex> linii, fiecare cu cate <tex>M</tex> numere, a i-a linie va contine o permutare a indicilor muchiilor, ce reprezintaordineain care vor apareain vectorul <tex>E</tex> al lui Por Costel. Muchiile se consideraindexate dupaordinea din fisierul de intrare (e.g. prima muchie cititaeste muchia cu indicele 1)
În fişierul de ieşire $algoritm.out$ se vor afişa <tex>T</tex> linii, fiecare cu câte <tex>M</tex> numere, a i-a linie va conţine o permutare a indicilor muchiilor, ce reprezintă ordinea în care vor apărea în vectorul <tex>E</tex> al lui Por Costel. Muchiile se consideră indexate după ordinea din fişierul de intrare (e.g. prima muchie citită este muchia cu indicele 1).
h2. Restricţii si Precizari
* <tex>1</tex> ≤ <tex>N</tex> ≤ <tex>10^5^</tex> * <tex>1</tex> ≤ <tex>M</tex> ≤ <tex>2*10^5^</tex> * <tex>1</tex> ≤ costul unei muchii ≤ <tex>10^6</tex>
* Se garanteaza ca exista cel putin o muchie care iese din nodul 1 *In programul lui Por Costel, infinit e definit ca fiind mai mare ca orice numarintreg * Se acceptaorice solutie care respectacerinta * **Atentie!** Graful poate contine douamuchii de la <tex>x</tex> la <tex>y</tex>, sau muchie de la <tex>x</tex> la <tex>x</tex>
* Se garanteaza ca exista cel puţin o muchie care iese din nodul 1 * În programul lui Por Costel, infinit e definit ca fiind mai mare ca orice număr întreg * Se acceptă orice soluţie care respectă cerinţa * **Atentie!** Graful poate conţine două muchii de la <tex>x</tex> la <tex>y</tex>, sau muchie de la <tex>x</tex> la <tex>x</tex>
h2. Exemplu
h2. Explicatie
Ordinea muchiilor in vectorul E a lui Por Costel va fiin acest caz: (1, 2, 1), (1, 3, 1), (3, 4, 2), (2, 3, 3). Se poate testa caalgoritmul se va finalizain douaiteratii. Existamai multe solutii care putea fi afisate. Un alt exemplu este: 1 3 4 2.
Ordinea muchiilor in vectorul E a lui Por Costel va fi în acest caz: (1, 2, 1), (1, 3, 1), (3, 4, 2), (2, 3, 3). Se poate testa că algoritmul se va finaliza în două iteraţii. Există mai multe soluţii care ar putea fi afişate. Un alt exemplu este: 1 3 4 2.
== include(page="template/taskfooter" task_id="algoritm") ==
