Cerința
Se dă lista muchiilor unui graf neorientat ponderat. Să se determine vârful pentru care media aritmetică a ponderilor muchiilor incidente este minimă. Dacă există mai multe vârfuri cu aceeași medie minimă, se va afișa vârful numerotat cu o valoare mai mică.
Date de intrare
Programul citește de la tastatură numerele n m
, reprezentând numărul de vârfuri și numărul de muchii din graf, apoi m
triplete i j p
, reprezentând muchiile, date prin extremități și pondere.
Date de ieșire
Programul va afișa pe ecran numărul vf
, reprezentând vârful determinat.
Restricții și precizări
1 ≤ n ≤ 100
- ponderile muchiilor sunt numere naturale nenule mai mici decât
1000
- graful dat nu conține noduri izolate
Exemplu
Intrare
5 6 1 2 10 2 3 2 2 5 2 3 5 12 3 4 1 4 5 5
Ieșire
4
Explicație
Mediile ponderilor muchiilor incidente cu vârfurile grafului sunt:
- pentru vârful
1
media este10
- pentru vârful
2
media este4.66667
- pentru vârful
3
media este5
- pentru vârful
4
media este3
- pentru vârful
5
media este6.33333
Astfel media minimă este 3
, pentru vârful 4
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 Graf:
#include <iostream>
using namespace std;
void Citire(int & n , int A[][105])
{
int m;
cin >> n >> m;
for(int i = 1; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
A[i][j] = 0;
while(m > 0)
{
int i , j , p;
cin >> i >> j >> p;
A[i][j] = A[j][i] = p;
m --;
}
}
void Calcul(int n , int A[][105], int linie , int &s ,int &cnt)
{
s = cnt = 0;
for(int i = 1 ; i <= n ; i ++)
if(A[linie][i] != 0)
s += A[linie][i], cnt ++;
}
int main()
{
int A[105][105], n;
Citire(n , A);
int smin = 10000000, nmin = 1 , nod;
for(int i = 1 ; i <= n ; i ++)
{
int s , cnt;
Calcul(n , A, i , s , cnt);
if(s * nmin < smin * cnt)
nmin = cnt , smin = s, nod = i;
//cerr << 1.0 * s / cnt << endl;
}
cout << nod;
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 #1651 Graf
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1651 Graf 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!