La grupa de excelență la care profesorul Genius predă sunt înscriși N
elevi (reprezentați prin numere distincte de la 1
la N
) care sunt sau nu prieteni. Pentru a face rezolvatul de probleme mai interesant, profesorul a inventat un joc: acesta alege elevul cu indicele K
și îi spune enunțul unei probleme la care să se gândească și pe care să o spună mai departe tuturor prietenilor săi. Fiecare elev care află problema o va transmite în ziua următoare prietenilor săi care nu au aflat-o încă și tot așa, până când problema nu mai poate fi transmisă mai departe. Jocul e însă mai complex de atât: în ziua în care un elev află problema nivelul său de aprofundare a problemei este 0
, în următoare zi nivelul de aprofundare este 1
și așa mai departe. În ziua X
după aflarea problemei, un elev va ajunge la gradul X
de aprofundare al acesteia. Profesorul Genius i-a anunțat pe elevi că aceștia se vor întâlni pentru a rezolva problema doar după ce toată lumea a aflat problema și toți elevii au ajuns la un nivel de aprofundare al problemei cel puțin P
.
Cerința
Știind modul în care funcționează jocul, profesorul Genius vrea să calculeze după câte zile de la lansarea problemei se va întâlni cu elevii săi pentru a o rezolva.
Date de intrare
Fișierul de intrare genius.in
conține următoarele informații:
- pe prima linie se află două numere:
N
, numărul de elevi înscriși la grupa de excelență, șiM
, numărul relațiilor de prietenie; - pe următoarele
M
linii se află câte două numereA
șiB
, acestea reprezentând o relație de prietenie (bidirecțională) între elevii desemnați de cele două numere; - pe următoarea linie se află
K
, indicele elevului căruia profesorul îi spune prima dată problema; - pe următoarea linie se află
P
, nivelul minim de aprofundare al problemei de către toți elevii, necesar pentru ca elevii să se întâlnească pentru aflarea rezolvării.
Date de ieșire
În fișierul genius.out
se va afișa un singur număr natural, reprezentând numărul minim de zile după care elevii se vor întâlni cu profesorul Genius pentru rezolvarea problemei sau -1 dacă întâlnirea nu este posibilă în condițiile impuse de joc.
Restricții și precizări
2 ≤ N ≤ 50.000
1 ≤ M ≤ 100.000
1 ≤ A, B ≤ N
1 ≤ K ≤ N
1 ≤ P ≤ 10.000.000
Exemplu
genius.in
7 6 1 3 1 7 1 5 2 5 2 4 5 6 2 5
genius.out
8
Explicație
În ziua 0
elevul 2
află problema și are nivelul de aprofundare 0
În ziua 1
află problema elevii cu indicii 4
și 5
În ziua 2
află problema elevii cu indicii 1
și 6
În ziua 3
află problema elevii cu indicii 3
și 7
Au trecut 3
zile și pentru ca nivelul minim de aprofundare pentru oricare dintre elevi să fie 5
, trebuie să mai treacă încă 5
zile
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 genius:
#include <fstream>
#include <vector>
#define DIM 50010
using namespace std;
vector <int> L[DIM];
int d[DIM];
int c[DIM];
int f[DIM];
int n, m, k, p, maxim, x, y, cost;
void bfs(int start) {
int p = 1, u = 1;
f[k] = 1;
c[1] = k;
while(p <= u) {
int nod = c[p];
for (int i=0;i<L[nod].size();i++) {
int vecin = L[nod][i];
if (f[vecin] == 0) {
f[vecin] = 1;
c[++u] = vecin;
d[vecin] = 1 + d[nod];
}
}
p++;
}
}
int main () {
ifstream fin ("genius.in");
ofstream fout("genius.out");
fin>>n>>m;
for (int i=1;i<=m;i++) {
fin>>x>>y;
L[x].push_back(y);
L[y].push_back(x);
}
fin>>k;
fin>>p;
bfs(k);
for (int i=1;i<=n;i++)
if(f[i] == 0) {
fout<<-1;
return 0;
}
for (int i=1;i<=n;i++)
if (d[i] > maxim)
maxim = d[i];
fout<<maxim + p;
return 0;
}
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 #3110 genius
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3110 genius 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!