Cerința
Tudor este foarte indecis, deoarece a fost chemat la r
festivaluri și puterea lui fizică nu îi permite să ajungă la toate. În orașul în care locuiește sunt m
străzi unidirecţionale și n
intersecții numerotate cu numere de la 1
până la n
. Festivalurile au loc în r
intersecții. El pornește din intersecția cu numărul z
.
Pentru a ajunge dintr-o intersecție în alta, folosește străzile. Când parcurge o stradă, el consumă o anumită energie, care diferă de la stradă la stradă.
După terminarea fiecărui festival, Tudor se va reîntoarce la casa lui, adică la intersecția cu numărul z
, costul drumului de această dată fiind 0
, pornind din nou la următorul festival.
Întrucât este un om foarte dedicat muzicii, Tudor vrea să participe la cât mai multe festivaluri, dar fără să-și depășească puterea lui fizică p
.
Determinați numărul maxim de festivaluri la care poate participa.
Date de intrare
Fișierul de intrare festivaluri.in
va conține pe prima linie numerele n
, m
, p
, z
, r
. Pe următoarele m
linii se vor afla câte 3
numere, reprezentând intersecția de unde începe strada, intersecția unde se termină strada și energia consumată pentru a parcurge strada. Pe următorul rând, se va afla cei r
indici ai intersecțiilor unde se vor organiza festivalurile.
Date de ieșire
Fișierul de ieșire festivaluri.out
va conține pe prima linie numărul cnt
, reprezentând numărul maxim de festivaluri la care poate participa Tudor.
Restricții și precizări
1 ≤ n , m , z , r ≤ 100
1 ≤ p≤ 10.000
- numerele de pe cele
m+1
linii a fișierului de intrare vor fi mai mici decât100
- este posibil ca plecând din intersecția
z
să nu se poată ajunge în toate intersecțiile
Exemplu
festivaluri.in
7 5 9 2 2 1 2 3 2 4 1 4 5 2 1 4 1 5 7 2 3 5
festivaluri.out
1
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Festivaluri:
//Dobricean Ionuţ 100 pct
#include <iostream>
#include <fstream>
#include <algorithm>
#define MAX 1005
using namespace std;
ifstream fin("festivaluri.in");
ofstream fout("festivaluri.out");
int n,m,p,z,cnt,nr,enercons,r;
int fes[MAX]; //vectorul în care vom stoca indicii intersectilor unde se vor afla festivalurile
int a[MAX][MAX] ;//declararea matricii costurilor
int festsort[MAX]; //costul intersectilor unde se organizeaza festivalurile in ordine crescatoare
void citire()
{ int i;
int x,y,co; //declararea intersecţiei de unde începe strada, intersecţia unde se termina strada şi costul acesteia
fin>>n>>m>>p>>z>>r;
for(i=1; i<=m; i++)
{ fin>>x>>y>>co;
a[x][y]=co;
}
for(i=1; i<=r; i++)
{ fin>>fes[i];
}
}
void roy() //Algoritmul lui Roy Floyd
{ int i,j,k;
for(k = 1;k <= n;k++)
for(i = 1;i <= n;i++)
for(j = 1;j <= n;j++)
if(a[i][k] && a[k][j] &&(a[i][k] + a[k][j] < a[i][j] || !a[i][j]) && i != j)
a[i][j] = a[i][k] + a[k][j];
}
void sortare()
{ int i,j;
for(i=1; i<=r; i++)
festsort[i]=a[z][fes[i]];
sort(festsort+1, festsort+1+r);
}
void determinare_cnt() // determinarea numarului de festivaluri
{ int i;
enercons=0;
for(i=1; i<=r; i++)
if(enercons+festsort[i]<=p && festsort[i]>0)
{ cnt++;
enercons+=festsort[i];
}
fout<<cnt;
}
int main()
{ citire();
roy();
sortare();
determinare_cnt();
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1895 Festivaluri
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1895 Festivaluri de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!