Rezolvare completă PbInfo #1651 Graf

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 este 10
  • pentru vârful 2 media este 4.66667
  • pentru vârful 3 media este 5
  • pentru vârful 4 media este 3
  • pentru vârful 5 media este 6.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 Adresa de email.

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!